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

c++ inheriting. getting data members value of base class

本文关键字:数据成员 基类 继承 获取 c++      更新时间:2023-10-16
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。我如何通过创建B对象从类A访问其数据成员的值?我创建了一个A类的对象,并给它们赋值1,2,3。最后,我想利用B类的显示功能打印1 2 3 100。

我理解如何使用类A的变量,但我也可以抓住它们的值吗?

你混淆了继承的概念,

 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); 

您可以将您的派生类修改为

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;    
};

,在main中可以访问

int main()
{
    A obj(1,2,3);
    B objB(obj,100);
    objB.display();
}

我想你可能误解了继承。

yo2没有办法知道你给yo1的值。A的变量中y2的值分别为4、5、6

为了稍微说明一下继承,您可以将显示方法重命名为"display_a"answers"display_b",然后您可以这样访问它们:

yo1.display_a ();//好吧。打印值1、2、3yo1.display_b ();//编译错误

yo2.display_a ();//好吧。打印值4、5、6yo2.display_b ();//好吧。从a继承的变量中打印值4、5

要了解原始代码中两个"display"方法发生了什么,请查找重载和关键字"virtual"。还要查找操作符::

首先,我认为您误解了继承的含义,yo1与yo2根本没有关系。第二,你想用B的显示函数来显示A对象的成员,但是你懒得用参数1,2,3来构造B,因为A已经用这些构造了。因为A的y是受保护的,而A的z是私有的,所以如果要实现目标,必须使用一种方法将A对象的成员复制到B对象。所以我认为拉詹潘迪特的答案是正确的,对你很有用。

相关文章: