加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

多重继承派生类以及多个子对象派生类的构造函数

(2011-11-11 21:04:00)
标签:

c

杂谈

分类: 面向对象练习

目的:掌握构造函数及析构函数执行的先后顺序

代码如下:

#include <iostream>

using namespace std;

class A

{

    private:

    int a;

    protected:

    int b;

    public:

    int c;

    public:

    A(int a,int b,int c):a(a),b(b),c(c)

    {

        cout<<"A 构造:"<<" "<<a<<" "<<b<<" "<<c<<endl;

    }

    ~A()

    {

        cout<<"A 析构:"<<" "<<a<<" "<<b<<" "<<c<<endl;

    }

};

class AA

{

    private:

    int g;

    protected :

    int h;

    AA(int g,int h):g(g),h(h)

    {

        cout<<"AA 构造:"<<" "<<g<<" "<<h<<endl;

    }

    ~AA()

    {

        cout<<"AA 析构:"<<" "<<g<<" "<<h<<endl;

    }

};

class B: public AA,public A

{

    private:

    int d;

    protected:

    int e;

    public:

    int f;

    public:

    A a2;

    A a1;

    B(int a,int b,int c,int d,int e,int f,int g,int h,int i,int j,int k,int l,int m,int n):A(a,b,c),AA(g,h),d(d),e(e),f(f),a1(i,j,k),a2(l,m,n)

    {

        cout<<"B 构造:"<<" "<<d<<" "<<e<<" "<<f<<endl;

    }

    ~B()

    {

        cout<<"B 构造:"<<" "<<d<<" "<<e<<" "<<f<<endl;

    }

};

int main()

{

    A s1(10,20,150);

    B B(1,2,3,4,5,6,7,8,9,10,11,12,13,14);

    return 0;

}

运行结果:

 http://s3/middle/892d87ff4b17554bcfd82&690


对执行结果的分析:如果派生类继承了多个基类,在派生类中调用基类构造函数时,是按照继承时的先后顺序来调用的(此程序中派生类B先继承的AA类,再继承的是A类),在派生类中若有多个子对象时(此程序中先声明的是a2子对象,后声明的是a1子对象),是按照子对象声明的先后顺序来构造;最后执行派生类自身的构造函数。析构函数执行相反!

 

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有