为什么输出不是0呢????

C334745710 2007-12-01 10:43:37
class CLS
{
public:
int m_i;
CLS( int i ) : m_i(i) {}
CLS()
{
CLS(0);
}
};

void main(){

CLS obj;
cout << obj.m_i << endl;
}

小弟是超级初学者,很迷惑!!!!!!!
...全文
99 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
C334745710 2007-12-02
  • 打赏
  • 举报
回复
嗯,小弟也试过了,的确,5楼6楼正解!!!!!

说实在的这个是我在别处看到的,那里人气少,没人给解决,我想好久也没能搞定,就贴到这来了,呵呵

多谢以上各位!
费德勒的左手 2007-12-02
  • 打赏
  • 举报
回复
5楼正解
Tuzki 2007-12-02
  • 打赏
  • 举报
回复
同意5楼
HelloDan 2007-12-01
  • 打赏
  • 举报
回复
在那个笔试题的贴里也讨论了。
tangshuiling 2007-12-01
  • 打赏
  • 举报
回复
我想大家可能误解楼主的意思了!不见得是楼主不知道默认构造如何写的问题。
可能楼主是想得到证实,为何得不到0的结果。
个人想法:默认构造函数调用重载构造函数时,会产生临时的类对像,导致this指针改变其值,自然m_i(i)就非先前this所指。
从蓝田到元谋 2007-12-01
  • 打赏
  • 举报
回复
构造一个对象,构造函数只调用一次
对于对象obj的构造调用的是无参数的构造函数,
当执行该函数体内的CLS(0)语句时,
C++又构造了一个临时对象,并将该临时对象的m_i初始化为0
然后再结束obj的构造工作,
可以CLS(int i):m_i(i){cout<<m_i<<endl;} 来验证
因此该临时对象要比对象obj先被构造
LHQokok 2007-12-01
  • 打赏
  • 举报
回复
LZ的构造函数很混乱,我做了一个,你参考一下,其实不用那么复杂的
#include <iostream.h>
class CLS
{
public:
int m_i;
CLS() : m_i(0) {}

};

void main(){

CLS obj;
cout << obj.m_i << endl;
}
tangshuiling 2007-12-01
  • 打赏
  • 举报
回复
如果把CLS obj;定义在全局应该就能得到0值。
ryfdizuo 2007-12-01
  • 打赏
  • 举报
回复
class CLS
{
public:
int m_i;
CLS( int i ) : m_i(i) {}
CLS()
{
CLS(0);
}
};
lz怎么能够怎么能在默认构造函数里面调用重载构造函数呢?
没见过这样做的啊,
^_^
xalangying 2007-12-01
  • 打赏
  • 举报
回复
写成这样就是0为, CLS(0); 对它所在的类没有什么作用
 class   CLS     
{
public:
int m_i;
CLS( int i ) : m_i(i) {}
CLS()
{
m_i =0;
}
};

void main(){

CLS obj;
cout < < obj.m_i < < endl;
}

64,680

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧