继承的构造和析构

1.构造函数的顺序和析构函数的顺序完全相反。
2.析构函数可写成虚函数
virtual ~CBase1( ) { cout<<“XG ~CBase1()!”<<endl;}
3.构造函数不能
4.基类有纯虚函数,在构造子类时仍然要执行基类的构造函数
5.构造子类时,先调用基类的构造函数
6.调用基类的构造函数时,按照继承列表的顺序。
但是如果有virtual时(即虚继承),则最先虚继承。

#include<iostream>
using namespace std;
class CBase1{

    int x ;

public:

    CBase1( ) { x=0 ; cout<<"GZ CBase1()!"<<endl;}

    CBase1(int a) { x=1;cout<<"GZ CBase1(int)!"<<endl;}

    virtual ~CBase1( ) { cout<<"XG ~CBase1()!"<<endl;}

};

class CBase2{

    int y;

public:

    CBase2( ) { y=0 ;cout<<"GZ CBase2()!"<<endl;}

    CBase2(int a) { y=a ;cout<<"GZ CBase2(int)!"<<endl;}

    ~CBase2() { cout<<"XG ~CBase2()!"<<endl;}

};

class A{

    int x;

public:

    A () {x=0; cout<<"GZ A()!"<<endl;}

    A(int a) { x=a; cout<<"GZ A(int)!"<<endl;}

    ~A() { cout<<"XG ~A()!"<<endl;}

};

class CDerived:public CBase1, virtual public CBase2{

    A a;

public:

    CDerived() { cout<<"GZ CDerived()!"<<endl;}

    CDerived(int x,int y ,int z):a(x),CBase1(y),CBase2(z)

    { cout<<"GZ CDerived(int,int)!"<<endl;}

    ~CDerived() { cout<<"XG ~CDerived()!"<<endl;}

};

int main(){
CBase1 *p=new CDerived;
cout<<"main() OVER!"<<endl;
delete p;

return 0;


  }



GZ CBase2()!
GZ CBase1()!
GZ A()!
GZ CDerived()!
main() OVER!
XG ~CDerived()!
XG ~A()!
XG ~CBase1()!
XG ~CBase2()!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值