c++继承.获取基类的数据成员值
c++ inheriting. getting data members value of base class
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对象。所以我认为拉詹潘迪特的答案是正确的,对你很有用。
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 枚举不是非静态数据成员或类的基类
- 通过使用具有私有数据成员的类重载 + 运算符来添加分数
- 是否有必要重载具有另一个类 B 的数据成员的类 A 的赋值运算符和复制构造函数?
- 指向成员的 C++ 指针(指向成员基类的指针)
- 如何创建一个将队列作为数据成员的类,该成员在 c++ 中存储另一个类的实例
- 没有任何数据成员的类会导致内存泄漏吗?
- 使用 #include 按<algorithm>字符串数据成员对类对象的向量进行排序
- 从私有结构数据成员访问类公共成员函数C++
- 向下转换为没有数据成员"foreign"类
- 为具有一个数字数据成员的类定义所有比较运算符的方便方法
- 错误:非整型 'const char[]' 的静态数据成员的类内初始化无效
- 运算符重载与 C++ : 具有指针数据成员的类
- 作为另一个类的数据成员的类
- 如何将具有相同类型的不同矢量数据成员的类对象传递给可以对这些数据成员中的任何一个进行操作的函数
- 当我们对没有任何数据成员的类的对象使用sizeof运算符时.那么输出会是什么
- 如何在c++中处理具有不同类型的多个数据成员的类
- 复制具有shared_ptr数据成员的类的构造函数
- 用于具有const数据成员的类的move和右值赋值操作符
- 英特尔C++错误:"pair"不是非静态数据成员或类"std::pair<const int, double>"的基类