标题:求助 解释下 运行结果
只看楼主
luo2018
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-6-8
结帖率:0
已结贴  问题点数:20 回复次数:4 
求助 解释下 运行结果
#include<iostream.h>
class A
{
public:
    A(){cout<<"类A的构造函数"<<endl;}
    ~A(){cout<<"类A的析构函数"<<endl;}
};
class B:public A
{
public:
    B(int x=0):b(x){cout<<"类B的构造函数"<<endl;}
    ~B(){cout<<"类B的析构函数"<<endl;}
    int get(){return b;}
private:
    int b;
};
class C:public A
{
public:
    C(int y=0):c(y){cout<<"类C的构造函数"<<endl;}
    ~C(){cout<<"类C的析构函数"<<endl;}
    int get(){return c;}
private:
    int c;
};
class D:public B,public C
{
public:
    D(int x=0,int y=0):B(x),C(y){cout<<"类D的构造函数"<<endl;}
    ~D(){cout<<"类D的析构函数"<<endl;}
    D add(B &p,C &q)
    {
        D D1;
        D1.d=p.get()+q.get();
        return D1;
    }
    void put(){cout<<d<<endl;}
private:
    int d;
};
void main()
{
    B B1(1);
    C C1(2);
    D D2(3,4);
    D2=D2.add(B1,C1);
    D2.put();
}
搜索更多相关主题的帖子: return public include private 
2012-06-08 16:07
luo2018
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-6-8
得分:0 
这是运行结果求解释
类A的构造函数
类B的构造函数
类A的构造函数
类C的构造函数
类A的构造函数
类B的构造函数
类A的构造函数
类C的构造函数
类D的构造函数
类A的构造函数
类B的构造函数
类A的构造函数
类C的构造函数
类D的构造函数
类D的析构函数
类C的析构函数
类A的析构函数
类B的析构函数
类A的析构函数
类D的析构函数
类C的析构函数
类A的析构函数
类B的析构函数
类A的析构函数
3
类D的析构函数
类C的析构函数
类A的析构函数
类B的析构函数
类A的析构函数
类C的析构函数
类A的析构函数
类B的析构函数
类A的析构函数
2012-06-08 16:09
心手2012
Rank: 2
等 级:论坛游民
帖 子:41
专家分:14
注 册:2012-3-15
得分:7 
派生类的构造函数调用之前都会先调用基类的构造函数,但析构函数则是先调用派生类再调用基类的
2012-06-09 16:42
nongzhaobo
Rank: 3Rank: 3
来 自:广西南宁
等 级:论坛游侠
帖 子:59
专家分:155
注 册:2012-4-8
得分:7 
笑看答案....
2012-06-09 22:47
糊涂无罪
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:37
专家分:161
注 册:2012-5-28
得分:7 
派生类首先是对基类的继承,然后在此基础上加以改造。而继承的时候基类的构造函数并没有被继承下来。所以当需要初始化一个派生类的对象的时候,系统就会去调用基类的构造函数首先对一个对象继承自基类的部分做初始化,基类的调用顺序是按照继承声明的顺序来发生的。然后才是对新增成员对象(其他类的直接在初始化列表里进行,本类特有的在构造函数体中进行)的初始化
2012-06-12 11:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-371103-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.096532 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved