在类继承中得到相同的结果
问题描述:
我的错误是什么?当我想要获得人员课程的结果时,它只给我提供二级信息,不显示他们的姓名?我错了吗 ?我想通过人类设置人体信息,并使用它的任何帮助? (请说我改变人类如何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();
}
答
这种静态的声明是问题
static string kname;
static int kage;
这些变量属于类而不是类的实例的原因...
所以当你做
person1.setName("carl")
和somewhen后
person2.setName("xoce")
现在两个对象具有相同的名称... xoce
之所以出现这种情况是因为静态变量不属于对象,但类本身的原因...
编辑>
来解决这个问题,消除静电字和定义setter和getter方法为你的类...
+0
好的请说出我是如何改变人类并保存改变人类 –
+0
嗨@masterboy我更新了我的答案... –
请花一分钟,让您的缩进是一致的。可以拥有自己的风格,但是每个其他行都有不同的缩进方式会让人感觉很不舒服 –
是的,我有很多人,希望保存他们的提示 –
然后删除人物类中的每个静态实例。 – drescherjm