实际上在下面的代码中, B类不会显示用户输入的名称和 ID 。编译控制台时,用户名称为空白,某些数字打印为 878464464566 而不是 ID 。
我希望你能说出我想说的话。
class A
{
public:
string name;
int ID;
void set()
{
cout << "Enter your name: ";
cin >> name;
cout << "Enter your ID: " ;
cin >> ID;
}
void show()
{
cout << "Your name: " << name;
cout << "Your ID: " << ID;
}
};
class B :public A
{
public:
void display()
{
cout << "Class A funtion: " << endl;
show();
}
};
void main()
{
A a;
B b;
a.set();
b.display();
}
答案 0 :(得分:1)
b对象不从对象获取值。继承赋予它与A类相同的成员,但不赋予对象a的值。您可能希望overload the assignment(=) operator作为B的成员从A类对象复制值。将此定义放在display()定义的右括号(})之后但在定义结束之前B级:
B& operator=(const A& source)
{
name = source.name;
ID = source.ID;
return *this;
}
一旦定义了赋值运算符,就可以通过赋值为对象b赋予对象a的值。把这一行放在“a.set();”之间和“b.display();”
b = a;
答案 1 :(得分:0)
您有两个对象,A类型的“a”和B类型的“b”。
对象“a”已初始化。对象“b”不是。
TYPE B是从TYPE A派生的事实不会使对象“b”得到对象“a”的值。