首页 > 编程知识 正文

关于数学的手抄报二年级,关于有未来二字的对联

时间:2023-05-03 19:47:10 阅读:264713 作者:2744

情况一: 如果一个没有任何构造函数的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;}结果如下:


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。