2017-04-07 6 views
-1

was ist falsch? wenn ich Ergebnis der Personenklasse bekommen will, gibt es mir nur sekundäre Personendaten und zeigen ihren Namen nicht an? Liege ich falsch ? Ich möchte menschliche Informationen nach Personenklassen setzen und jede Hilfe nutzen? (bitte sagen Sie mir, wie Änderung kName durch menschliche und Änderung der Person Klasse speichern) Person.herhalten das gleiche Ergebnis in Klassenvererbung

#include<iostream> 
#ifndef person_h 
#define person_h 

using namespace std; 

class person { 

protected: 


    static string kname; 

    static int kage; 


public: 

    static void setnumber(); 
    static void setname(); 

    static void setage(); 

    void display(); 
}; 
#endif 

person.cpp

#include"person.h" 


string person::kname; 
int person::kage =0; 



void person::setage() 
{ 

    cout << " please enter your age \n"; 

    cin >> kage; 


} 

void person::setname() 
{ 
    cout<< "please enter your name \n"; 
cin >> kname; 

} 


void person::display() 
{ 
    int i=0; 

    for(i=0; i< 3; i++) 
     cout << kname <<endl; 
} 

human.h

#include<iostream> 
    #include"person.h" 
    #ifndef human_h 
    #define human_h 


    using namespace std; 

    class human : public person { 

    protected: 

     person k[100]; 
    static int i; 

    static int counter; 


    public: 

     void info(); 

}; 
#endif 

human.cpp

#include"human.h" 

int human::number=0; 
int human::counter=0; 
void human::setnumberofperson(int a) 
{ 
srand(time(0)); 

    cout << " how many person ? \n"; 
    cin >> a; 
    counter = a; 



} 

void human::info() 
{int i=0; 

for (i=0; i< counter; i++){ 


    k[i].setage(); 

     k[i].setname(); 



cout << k[i].kname << "\t" << "\t" << k[i].kage << endl; 


} 
} 

main.cpp

#include<iostream> 
#include"person.h" 
#include"human.h" 
int main() 
{ 


int a; 
person k1; 

human e1; 
e1.setnumberofperson(a); 
e1.sabtename(); 
k1.display(); 
} 
+1

nehmen Sie bitte eine Minute Ihre Einbuchtung zu machen konsistent. Es ist in Ordnung, Ihren eigenen Stil zu haben, aber es ist ziemlich erschütternd, jede andere Zeile anders eingerückt zu haben. –

+0

ja ich habe eine Menge Person und möchte ihre Informationen speichern –

+0

Dann entfernen Sie jede Instanz von statisch in Ihrer Personenklasse. – drescherjm

Antwort

1

Diese statischen Erklärungen sind der Grund des Problems

static string kname; 
static int kage; 

diese Variablen zu der Klasse gehören und nicht zu den Instanzen der Klasse ...

Wenn Sie also tun

person1.setName("carl") 

und irgendwann nach

person2.setName("xoce") 

nun beide Objekte den gleichen Namen ... xoce

der Grund, warum dies passiert ist, weil statische Variablen gehören Sie nicht zu dem Objekt, sondern auf die Klasse selbst haben ...

Bearbeiten>

dieses Problem zu beheben, das statische Wort entfernen und Setter und Getter für Ihre Klasse definieren ...

+0

ok bitte sagen Sie mir, wie ändern Sie kname von Mensch und speichern Sie Wechsel in Person Klasse –

+0

Hallo @ Masterboy Ich habe meine Antwort aktualisiert ... –

Verwandte Themen