#include<iostream>
using namespace std;
class Base{
private:
int x;
public:
Base(int i){
x = i;
}
void print(){
cout<<x<<endl;
}
};
class Derived: public Base{
public:
Base b;
public:
//the constructor of the derived class which contains the argument list of base class and the b
Derived(int i, int j): Base(i), b(j)
{}
};
int main(){
Derived d(11, 22);
d.print();
d.b.print();
return 0;
}
为什么b.x
的值是 11,而d.b.x
的值是 22?
如果基类的构造函数初始化类Base
中的 intx
,是否存在Base
对象?
在派生构造函数的参数列表中,当有作为类成员的Base b
时,应该有一个参数还是两个参数?
Derived
的构造函数使用其第一个参数(11)来初始化其基类Base
,因此成员Derived.x
的值为11。这是d.print()
输出的内容。
Derived
的构造函数使用其第二个参数 (22) 来初始化其成员b
(其类型为Base
)。这是d.b.print()
输出的内容。
这里有两个Base
对象。d
是Derived
,也是Base
。成员d.b
也是Base
。
Derived
构造函数的参数列表可以是您想要的任何内容,具体取决于您希望如何初始化其任何内容。
i
的值分配给类Derived
的变量x
,j
的值分配给对象的变量x
b
在Derived
中声明。Derived
的x
和b
的x
是两个不同的变量。如果要将值分配给b
,则需要第二个参数。可以显式调用 forBase
的构造函数,作为在Derived
构造函数中使用 2 个参数的替代方法。