| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 564 人关注过本帖
标题:各位高手,帮我看看这个代码运行结果呗~~~
只看楼主 加入收藏
sunflower44
Rank: 1
等 级:新手上路
帖 子:23
专家分:1
注 册:2011-8-15
收藏
得分:0 
回复 9楼 zhoufeng1988
2)one2。调用带有一个int参数的构造函数,输出2。
为什么调用带int参数的构造函数?
class TWO{
    ONE one1;
    ONE one2;

不是one2也不带参吗?



2011-08-17 09:47
xg5699
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:140
专家分:522
注 册:2011-7-27
收藏
得分:5 
回复 7楼 sunflower44
第二种过程:
由于TWO类中有子对象one1和one2,所以要先调用类ONE的构造函数,对one1和one2进行初始化。one1和one2均不带参,所以调用 ONE():c(0){cout<<1;},输出11,接下来调用TWO的构造函数,把one2初始化为4,输出3.这样结果就是113.
第二种过程:
由于TWO类中有子对象one1和one2,所以要先调用类ONE的构造函数,对one1和one2进行初始化(但你改变了one2的初始化,后面说)。one1和one2均不带参,先创建one1 所以调用 ONE():c(0){cout<<1;},输出1,
接下来创建one2 本来one2也是输出1,但因为调用的是TWO类带参的构造函数,TWO(int m):one2(m)初始化了one2(m),one2调用的就不是ONE的构造函数了
而是ONE类中带参的构造函数!
ONE(int n):c(n){cout<<2;}
所以输出了2而不是1


如果还是不明白你可以将代码TWO(int m):one2(m)将one2改成one1看下输出结果就会明白

[ 本帖最后由 xg5699 于 2011-8-17 11:57 编辑 ]

都不结贴我郁闷那!
2011-08-17 11:44
xg5699
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:140
专家分:522
注 册:2011-7-27
收藏
得分:5 
如果你还是不明白呢,没关系,你按照我说的这么做,先上机运行下这个代码
程序代码:
#include<iostream>
using namespace std;
class ONE
{
public:
    ONE(){cout<<"1"<<endl;}
};
class TWO
{
private:
    ONE a;
public:
    TWO(){};
};
void main()
{
    TWO a;
}
不要直接运行,心理想下输出结果会是几,等有了结果在运行

运行后输出的结果和你心理想的一样那么在运行下面的代码
程序代码:
#include<iostream>
using namespace std;
class ONE
{
public:
    ONE(){cout<<"1"<<endl;}
    ONE(int a){cout<<"2"<<endl;}
};
class TWO
{
private:
    ONE a;
public:
    TWO(int b):a(b){};
};
void main()
{
    TWO a(2);
}
步骤还是同上,慢慢的你自己会会找到为什么的


都不结贴我郁闷那!
2011-08-17 12:10
tiantiancc
Rank: 1
等 级:新手上路
帖 子:6
专家分:1
注 册:2011-8-12
收藏
得分:0 
不好意思,搞错。版主出马,果然一个顶俩啊,就是牛逼。
2011-08-17 14:59
快速回复:各位高手,帮我看看这个代码运行结果呗~~~
数据加载中...
 
   



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

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