派生类中一般数据成员的初始化答案:C 解析:(P130)派生类的构造函数的成员初始化,包括基类成员、基类对象成员和派生类成员。因为本身就是初始化定义的对象,在构造函数中再进行该类对象的初始化产生了循环定义,或者类中不能包括本身类的成员对象。所以选择C项。
C解析:本题考核构造函数。在C++中,构造函数不能被继承,因此,派生类的构造函数必须通过调用基类的构造函数来初始化基类子对象。所以,在定义派生类的构造函数时,除了对自己的数据成员进行初始化外,还必须负责调用基类构造函数使基类的数据成员得以初始化。如果派生类中还有子对象,还应包含对子对象初始化的构造函数.但是...
class C : virtual public A { public: C(int a) :A(a) { cout << "C" << endl; } }; class D :public B, public C { public:D(int a, int b) :A(a), B(b), C(b)//假设B、C类中的构造函数会执行A的构造函数(没被忽略),那A的构造函数将执行三次,那么变量s的值应为b的值,若...
以上面的A、B、C 类为例,C是最终的派生类,B就是C的直接基类,A就是C的间接基类。因为在C中调用了B的构造函数,B又调用了A的构造函数,相当于C间接地(或者说隐式地)调用了A的构造函数,如果再在C中显式地调用A的构造函数,那么A的构造函数就被调用了两次,相应地,初始化工作也做了两次,这不仅是多余的,还会...
由于派生类包含基类的原因,我们在创建一个派生类的时候,系统会先创建一个基类。需要注意的是,派生类会吸纳基类的全部成员,但并不包括构造函数及后面讲的析构函数,那么就意味着创建派生类在调用自己的构造函数之前,会先调用基类的构造函数。 这里一点我们可以通过代码验证: ...
下列关于派生类构造函数和析构函数的叙述中,错误的是 A. 派生类的构造函数会隐含调用基类的构造函数 B. 如果基类中没有默认构造函数,那么派生类必须定义构造函数 C. 在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数 D. 在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数 ...
class CFlyingBug: public CBug { int wingNum; public: /*利用初始化列表来指定基类的构造函数;以及为派生类的某些成员变量做初始化*/ // CFlyingBug( ) { } 若不注释掉则会编译出错;因为定义了有参constructor后,编译器不在生成默认无参constructor了;那么如果此时欲调用无参构造函数就会出错! CFlyingBug (...
A--->B--->C 构造函数的调用顺序是按照继承的层次自顶向下、从基类再到派生类的。那么创建C类对象时构造函数的执行顺序为: A类构造函数-->B类构造函数-->C类构造函数 派生类构造函数中只能调用直接基类的构造函数,不能调用间接基类的。以上面的A、B、C 类为例,C是最终的派生类,B就是C的直接基类,A就...
C++是一种面向对象的编程语言,提供了派生类(子类)的概念,允许我们在已有类的基础上进行扩展并添加新的行为和属性。派生类的构造函数是创建和初始化派生类对象时调用的函数。本文将介绍C++中派生类构造函数的概念、使用方法和注意事项。 在C++中,每个类都有一个构造函数,用于创建和初始化该对象。派生类继承了基类的...
正确答案:C 解析: 构造函数的主要作用是对数据成员初始化。在设计派生类的构造函数中,不仅要考虑派生类所增加数据成员的初始化,还应考虑基类中构造函数的初始化。子对象是对象中的对象,子对象的初始化是在建立派生类时通过调用派生类构造函数来实现。所以派生类构造函数的任务包括3部分:对基类数据成员初始化:对子对象...