在类继承中得到相同的结果

问题描述:

我的错误是什么?当我想要获得人员课程的结果时,它只给我提供二级信息,不显示他们的姓名?我错了吗 ?我想通过人类设置人体信息,并使用它的任何帮助? (请说我改变人类如何kname和保存个人类变化) person.h在类继承中得到相同的结果

#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

请花一分钟,让您的缩进是一致的。可以拥有自己的风格,但是每个其他行都有不同的缩进方式会让人感觉很不舒服 –

+0

是的,我有很多人,希望保存他们的提示 –

+0

然后删除人物类中的每个静态实例。 – drescherjm

这种静态的声明是问题

static string kname; 
static int kage; 

这些变量属于类而不是类的实例的原因...

所以当你做

person1.setName("carl") 

和somewhen后

person2.setName("xoce") 

现在两个对象具有相同的名称... xoce

之所以出现这种情况是因为静态变量不属于对象,但类本身的原因...

编辑>

来解决这个问题,消除静电字和定义setter和getter方法为你的类...

+0

好的请说出我是如何改变人类并保存改变人类 –

+0

嗨@masterboy我更新了我的答案... –