首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为什么输出结果不是0解决办法

2012-03-27 
为什么输出结果不是0#include iostream #include cstdio using namespace stdstruct CLS{int m_iCLS

为什么输出结果不是0
#include <iostream >
#include <cstdio >
using namespace std;
struct CLS
{
  int m_i;
  CLS( int i ) : m_i(i) {}
  CLS()
  {
  CLS(0);
  }
};
int main()
{
CLS obj;
cout << obj.m_i << endl;
return 0;
}

输出结果为一个奇怪的数字,为什么不是0?
希望各位指教!谢谢!

[解决办法]
你在构造里在去构造一个局部变量??

在看下构造函数的作用
struct CLS 

int m_i; 
CLS( int i ) : m_i(i) {} 
CLS() : i(0)


};
[解决办法]
不错的题目!
ckt1120的回答可能比较含糊。

错误的原因如下:
1. 构造函数不能够显示的调用,因为编译器对构造函数的处理比较特别。
2. 像CLS(0);其实是创建了一个新的对象,你单步执行一下,察看一下this指针就可以发现,this的值改变了。

ckt1120提出的方法是比较好的解决方法,应避免构造函数的嵌套调用。
[解决办法]
一个对象只会调用一次构造函数
[解决办法]
构造不能嵌套调用,*this指针指向的对象变了
[解决办法]
你new一个对象就可以了~~~~~

热点排行