C++中,继承时,创建子类对象,能否在子类构造函数初始化列表里调用基类构造函数?

然后基类构造函数里直接初始化基类private成员??这一步在子类构造函数右边的初始化列表里进行?

//如果基类没有默认构造函数,则子类的构造函数必须要给定基类的构造函数参数。因为,在类的实例化时是先执行基类构造函数在执行子类构造函数。子类构造函数初始化列表后面直接列出基类构造函数即可,系统会自动调用,不用用户调用。
class A{
public:
A(int x,int y):x(x),y(y){}
private:
int x; int y;
};
class B:public A{
public:
B(int x,int y,int z):A(x,y),z(z){} //子类构造函数初始化列表必须给出基类所需参数
};
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-28
不能,你自己写的构造函数体,是在初始化列表执行之后才执行,也就是如果不写在列表里,就会调用默认构造函数构造基类对象部分。追问

不能?为什么?

初始化列表当然是先执行的,这跟不能有什么关系?

追答

你在函数体里面再写的话,等于给基类部分构造两次,肯定不对啊,要是想重新赋值,那直接用语句,不能再用构造函数了。

本回答被网友采纳

C++中,继承时,创建子类对象,能否在子类构造函数初始化列表里调用基类构...
\/\/如果基类没有默认构造函数,则子类的构造函数必须要给定基类的构造函数参数。因为,在类的实例化时是先执行基类构造函数在执行子类构造函数。子类构造函数初始化列表后面直接列出基类构造函数即可,系统会自动调用,不用用户调用。class A{ public:A(int x,int y):x(x),y(y){} private:int x; i...

C++中派生类的构造函数怎么显式调用基类构造函数?
关于显示调用基类的构造函数,是不可行的。必须用初始化表的形式调用基类构造函数,才能正确的把子类继承下来的父类的成员初始化了。如果在子类构造函数体内显式调用了基类构造函数的话,那么该构造函数就会对一个在子类构造函数内存空间内的一个临时对象进行了初始化,因为没有取得正确的对象(子类对象)的...

c++中为什么对继承过来的基类成员初始化的工作也要由派生类的构造函数承...
子类从基类继承来的变量在基类构造函数中可以初始化,在子类构造函数中也可以初始化!在子类构造对象时,首先要调用基类的构造函数,再调用子类的构造函数;子类对继承来的变量:1.初始化:那么可想而知,最终构造子类对象时子类对这个变量的初始化起了作用(因为先基类构造函数对其初始化,后子类构造函数对...

...基类不缺省构造时候派生类要调用基类构造函数进行初始化
首先,C++本身就规定创建子类对象的时,先调用基类的构造函数,然后再调用自己类的构造函数。当我们的基类没有自己定义构造函数时候(就是系统默认的构造函数)时。创建子类对象会先默认调用基类的默认构造函数。但是,当我们的基类自己定义了构造函数,(可能定义了很多个)此时不会再自动生产默认构造。但是...

C++初始化列表,知道这些就够了
创建对象时,C++要求调用所有子对象的构造函数。在例子中,由于Base类没有默认构造函数,而BaseChild继承它时未指定构造函数,所以在创建BaseChild对象时出错。为避免默认构造函数,我们可以使用初始化列表,如下所示:通过这样的语法,你可以直接在构造函数定义体的左括号前指定基类的构造函数,如Base(int ...

C++的基类和派生类构造函数
此外,函数头部是对基类构造函数的调用,而不是声明,所以括号里的参数是实参,既可以是派生类构造函数参数列表中的参数,也可以是局部变量、常量等,例如:构造函数调用顺序 在C++继承中,创建派生类对象时会优先调用基类构造函数,然后是派生类构造函数。如果继承层次有好几层,例如:A --> B --> C...

C++ Primer Plus学习笔记之类继承
在继承特性中,派生类需要构造函数,可添加额外数据成员和成员函数。派生类不能直接访问基类私有成员,只能通过基类方法。创建派生类对象时,程序首先创建基类对象,若未调用基类构造函数,将使用默认构造函数。派生类构造函数应通过成员初始化列表调用基类构造函数,并初始化派生类新增数据成员。释放对象时,先...

C++类的继承的成员初始化问题:
根据C++类的规则:派生类的构造函数只能初始化自己的成员,而不能初始化基类的成员。当然,有时派生类从基类继承了成员,它也可以初始化其从基类继承的成员。这时要用构造函数初始化列表中包含基类名及其从基类继承的成员:即上例中的A(n)。至于你所说的赋值情况,只是在派生类中访问基类的公有成员的...

C++中 A () : B(),C()是什么意思啊
我当成这是一个多重继承 子类的构造函数A()调用基类构造函数B()和另一个基类构造函数C()一般情况 A()中有参数 然后 赋给B()和C()例如 A(int a,int b):B(a),C(b){} 这样 在构造子类对象时 想对基类的数据成员赋值 就可以用这种方法,节省内存开销 可读性又好 ...

什么情况下必须使用C++的初始化列表
3. 继承类中调用基类初始化构造函数, 实际上就是先构造基类对象, 必须使用初始化列表.别的不再说明, 什么时候必须使用初始化列表是很明显的;另外, 简单的说, 任何时候都鼓励使用初始化列表, 一些别的事情(比如在构造函数中分配资源之类的, 请参考RAII, Resource Acquizition Is Initialization)可以...

相似回答