| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1372 人关注过本帖
标题:一个程序结果题,不太明白结果的输出,可以指导一下吗,谢谢,大神
只看楼主 加入收藏
转念一想
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-10-18
结帖率:71.43%
收藏
已结贴  问题点数:5 回复次数:1 
一个程序结果题,不太明白结果的输出,可以指导一下吗,谢谢,大神
#include <iostream>
using namespace std;
class A
{
public:
    A(char i){cout<<"A's cons."<<i<<endl;}
    ~A(){cout<<"A's des."<<endl;}
};
class B:virtual public A
{
public:
    B(char i,char j):A(i){b = j; cout<<"B's cons."<<j<<endl;}
    ~B(){cout<<"B's des."<<b<<endl;}
private:
    char b;
};
class C:virtual public A
{
public:
    C(char i,char j):A(i)
    {
        cout<<"C's cons."<<j<<endl;
    }
    ~C(){cout<<"C's des."<<endl;}
};
class D:public B,public C
{
public:
    D(char i,char j,char k,char s,char m,char n)
        :C(k,s),B(i,j),A(i),aa(m){cout<<"D's cons."<<endl;}
    ~D(){cout<<"D's des."<<endl;}
private:
    A aa;
};
void main()
{
    D obj('a','b','c','d','e','f');
}
这个程序结果分析不明白,为什莫输出A,以后又输出B,他们的输出顺序不应该是按照声明的顺序输出吗,
我的想法是先A,C,B,A
求指导,谢谢
搜索更多相关主题的帖子: public include private 
2017-06-21 08:46
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:5 
听不懂,我来确认一下:
你这里那些小写字母是无关的,析构的输出也是无关的,你懒得将不相关的代码剔除,别人看糊涂了是活该。现在
实际输出是 ABCAD
而你期望是 ACBAD
也就是对于 class D : public B, public C 这个D类,你认为应该先构造C再构造B对吧
也许是因为你是这么写的 D(……) : C(…), B(…) { …… },所以你认为应该先构造C ?

如果是,你应该这么问
#include <iostream>

struct A
{
    A() { std::cout << 'A'; }
};
struct B
{
    B() { std::cout << 'B'; }
};
struct C : A, B
{
    C() : B(), A()
    {
    }
};
int main( void )
{
    C c;
}

实际输出是 AB,为什么不是按 C() : B(), A() 的列表顺序先构造B再构造A ?
这样一来,别人一眼就能看出你想问什么。

2017-06-21 09:32
快速回复:一个程序结果题,不太明白结果的输出,可以指导一下吗,谢谢,大神
数据加载中...
 
   



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

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