[转贴]为什么输出不是0?

nriet8357 2004-07-31 08:29:40
class CLS
{
public:
int m_i;
CLS( int i ) {m_i = i;}
CLS()
{
CLS(0);
}
};

int main(int argc, char* argv[])
{
CLS obj;
cout << obj.m_i << endl;
}

为什么输出不是0呢??

----转自南大小百合*CPlusPlus版----
...全文
172 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunjx119 2004-08-02
  • 打赏
  • 举报
回复
CLS()
{
CLS(0);
}
----------------------------
构造函数递归个没完,怎么会有正确的答案呢?
tatbaby 2004-08-01
  • 打赏
  • 举报
回复
可以结贴了
steel007 2004-07-31
  • 打赏
  • 举报
回复
楼主是从java转过来的吧?
java中可以支持在一个构造函数中调用另一个构造函数,但是C++中不支持,导致了完全不同的语义。
yesdo 2004-07-31
  • 打赏
  • 举报
回复
呵呵,恩,这问题好。我发现来多了这里,总有一天要怀疑1+1=2是不是真的。
CLS()
{
CLS(0);//问题错在这,等于重新建造了个cls对象,其实直接用m_i=0代替就可以
// 了!
}
beyondtkl 2004-07-31
  • 打赏
  • 举报
回复
楼上的兄弟,也就是说
CLS()
{
CLS(0);
}
又构造了一个对象,这个对象的m_i等于0,而obj这个对象的m_i没有被构造,仍然是随机数,
不知这个理解对不对??

// 对.
venus1982518 2004-07-31
  • 打赏
  • 举报
回复
CLS( int i ) {m_i = i;}



CLS()
{
CLS(0);
}

这两个有关系么?怎么会是0呢?本来就是随机数。
北极猩猩 2004-07-31
  • 打赏
  • 举报
回复
按照搂住的意思,默认构造函数应该这样写
CLS():CLS(0){}
RookieStar 2004-07-31
  • 打赏
  • 举报
回复
CLS()
{
CLS(0); // 栈内存上分配的局部变量,与*this无关,作用域仅局限于该non-argu构造函数中。
}

conquers 2004-07-31
  • 打赏
  • 举报
回复
楼上的兄弟,也就是说
CLS()
{
CLS(0);
}
又构造了一个对象,这个对象的m_i等于0,而obj这个对象的m_i没有被构造,仍然是随机数,
不知这个理解对不对??
tatbaby 2004-07-31
  • 打赏
  • 举报
回复
调用CLS()构造函数产生了一个类的临时对象,并对其初始化,但并不对调用构造函数的对象初始化

所以
class CLS
{
public:
int m_i;
CLS( int i )
{ init(i); //m_i = i;
}
CLS()
{
init(0);

//CLS(0);
}
private:
void init(int i){ m_i=i;}
};
Dong 2004-07-31
  • 打赏
  • 举报
回复
上面所说的i都要改为m_i
renheihei 2004-07-31
  • 打赏
  • 举报
回复
刚才调试过了,输出的随机数!
Dong 2004-07-31
  • 打赏
  • 举报
回复
CLS()
{
CLS(0);
}

错就错在这里啦。
因为没有参数的构造函数里是构造另一个对象的,而“本身”的对象成员i是没有被初始化的,而i在对象的构造中是随机被初始化,所以对于不同的编译起i的结果会是不同的。你这样还浪费空间。
必须这样的

CLS()
{
i=0;
}
yeyu170 2004-07-31
  • 打赏
  • 举报
回复
我这里没有编译器,但我感觉输出应该是0。
上面是类的重载,在声明obj对象时没有加参数,调用的应该是第二构造函数。
xrhone 2004-07-31
  • 打赏
  • 举报
回复
也可以说成是CSL(0)运行完这个函数后就被自动析构了吧。
hellwolf 2004-07-31
  • 打赏
  • 举报
回复
第一次见过这种语法,哈哈
nriet8357 2004-07-31
  • 打赏
  • 举报
回复
原来如此,谢谢各位捧场!

64,282

社区成员

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

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