class A
{
public:
A(int a, int b, int c)
:x(a), y(b), z(c)
{}
void display()
{
cout << "x is " << x << endl;
cout << "y is " << y << endl;
cout << "z is " << z << endl;
}
int x;
protected:
int y;
private:
int z;
};
class B : public A
{
public:
B(int x, int y, int z, int extra)
: A(x, y, z), num(extra)
{}
void display()
{
cout << "x is " << x << endl;
cout << "y is " << y << endl;
//cout << "z is " << z << endl;
}
private:
int num;
};
int main()
{
A yo1(1,2,3,);
B yo2(4,5,6,100); //<---
yo2.display(); //I want to print 1 2 3 100
return 0;
}
我在这里有一个简单的继承。使用继承,我想获得A
的值并将其放入B
。如何通过创建A
对象来访问类B
中的数据成员的值?我创建了一个类A
的对象,并给它们值1,2,3。最后,我想使用类B
的显示功能打印1 2 3 100。
我理解如何使用类A
中的变量,但我还可以获取它们的值吗?
答案 0 :(得分:0)
你对继承的概念感到困惑,
B yo2(4,5,6,100);
在此期间,为对象yo2
创建了基础类的单独副本,该副本与对象yo1
A yo1(1,2,3,);
数据成员x,y,z的yo1
为1,2,3,yo2
为4,5,6
如果你想要输出
1 2 3 100
然后将对象创建为:
B yo2(1,2,3,100);
答案 1 :(得分:0)
您可以将派生类修改为
class B : public A
{
public:
B(A& obj, int extra)
: A(obj.x, obj.y, obj.z), num(extra)
{}
void display()
{
A::display();
cout << "num is " << num << endl;
}
private:
int num;
};
在主要内容中,您可以访问
int main()
{
A obj(1,2,3);
B objB(obj,100);
objB.display();
}
答案 2 :(得分:0)
我认为你可能误解了遗产。
yo2无法知道你给yo1的值。 Ao2在A变量中的值分别为4,5,6。
说明继承有点你可以重命名显示方法&#34; display_a&#34;和&#34; display_b&#34;然后你就可以访问它们了:
yo1.display_a(); // 好。打印值1,2,3 yo1.display_b(); //编译错误。
yo2.display_a(); // 好。打印值4,5,6 yo2.display_b(); // 好。从继承自A的变量打印值4,5。
要了解两个&#34;显示&#34;原始代码中的方法,查找重载和关键字&#34;虚拟&#34;。还要查看operator ::
我希望这会有所帮助。
答案 3 :(得分:0)
首先,我认为你误解了继承意味着什么,yo1与yo2完全无关。其次,你想使用B显示函数来显示一个对象的成员,但是你懒得用参数1,2,3构造B,因为A使用它们构造了。因为A是受保护的并且A是私有的,所以如果你想实现目标,你必须使用一种方法将对象的成员复制到B对象。所以我认为rajenpandit的答案是正确的,对你有用。