关于nontrivial default constructor(二)
来源:互联网 发布:影视制作软件哪个好 编辑:程序博客网 时间:2024/05/20 03:04
情况一:
如果一个没有任何构造函数的class派生自一个带有默认构造函数的base class,那么派生类的构造函数被视为nontrivial,因此会被编译器合成出来。它将调用基类的默认构造函数。
class Base{public:Base(){cout << "Base constructor ..." << endl;}};class Derived : public Base{public:};int main(void){Derived derived;return 0;}结果如下:
情况二:
如果设计者提供多个构造函数,但就是没有default constructor, 编译器会扩张每一个构造函数。但它不会合成一个新的默认构造函数。
class Base{public:Base(){cout << "Base constructor ..." << endl;}};class Derived : public Base{public:int a;Derived(int x){a = x;}};int main(void){//Derived derived; //出现编译错误Derived derived(10);cout<<derived.a<<endl;return 0;}
当然,如果此时定义了默认构造函数,如下,
class Base{public:Base(){cout << "Base constructor ..." << endl;}};class Derived : public Base{public:int a;Derived(int x){a = x;}Derived(){cout<<"user-defined default constructor ..."<<endl;a = 0;}};int main(void){Derived derived0; cout<<derived0.a<<endl;Derived derived1(10);cout<<derived1.a<<endl;return 0;}
如果类内还存在着带有默认构造函数的member class object,则这些默认构造函数也会被调用——在基类构造函数之后
class Base{public:Base(){cout << "Base constructor ..." << endl;}};class B{public:B(){cout << "B constructor ..." << endl;}};class Derived : public Base{public:int a;B b;Derived(int x){a = x;}Derived(){cout<<"user-defined default constructor ..."<<endl;a = 0;}};int main(void){Derived derived0; cout<<derived0.a<<endl;Derived derived1(10);cout<<derived1.a<<endl;return 0;}结果如下:
0 0
- 关于nontrivial default constructor(二)
- 关于nontrivial default constructor(一)
- 编译器需要implicit nontrivial default constructor情况
- nontrivial default constructor(重要的默认构造函数)---四种情况
- 深度探索C++对象模型-----编译器’何时‘自动合成nontrivial default constructor
- 关于default constructor的误解
- 关于has no default constructor的错误
- default constructor
- default constructor
- Default Constructor
- Default Constructor && Copy Constructor
- C++ default constructor 讨论
- Default Constructor 建构操作
- c++的“default constructor”
- compiler-generated default constructor
- 2.1Default Constructor
- default constructor and no-parameter constructor
- Another form of default constructor
- Color Image Processing
- C#基础知识
- JDK环境配置
- 算法竞赛入门经典 第二版 习题5-6 对称轴 Symmetry uva1595
- 数据预处理及相应的Rapidminer操作
- 关于nontrivial default constructor(二)
- 2.1 数据类型
- art fcitx中文设置输入英文符号
- Android-极光推送
- PAT-B 1019. 数字黑洞 (20)
- 2017.2.25【初中部 提高组】模拟赛B组 倒霉的小C(beats) 题解
- PAT甲级练习1080. Graduate Admission (30)
- (转)Android 百分比布局库(percent-support-lib) 解析与扩展
- PAT甲级1067. Sort with Swap(0,*) (25)