c ++继承。获取数据成员基类的值

时间:2014-03-20 06:40:36

标签: c++ inheritance

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中的变量,但我还可以获取它们的值吗?

4 个答案:

答案 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的答案是正确的,对你有用。