C++问题,为什么第一个输出不是0?

来源:百度知道 编辑:UC知道 时间:2024/07/07 21:58:00
#include<iostream>
using namespace std;
class CLS
{public:
int m_i;
CLS(int i){m_i=i;}
CLS()
{
CLS(0);
}
};
main()
{
CLS obj;
cout<<obj.m_i<< endl;
CLS a(0);
cout<<"\n"<<a.m_i<< endl;
return 0;}

我个人是这样理解的:因为在CLS()中调用了CLS(0),所以在CLS()中又构造出一个CLS匿名对象,并用0来初始化该成员变量,而不是ojb对象.在CLS()调用结束时,这个对象就被析构了,而没有按我们原意图把0赋值给obj对象.
有关面向对象程序设计的书中都提到了,构造函数不能显示的调用.只能在初始化对象时使用.所以程序应该这样子写:

#include<iostream>
using namespace std;
class CLS
{
public:
int m_i;
CLS(int i)
{
m_i=i;
}
CLS()
{
m_i = 0;
}
};
main()
{
CLS obj;
cout<<obj.m_i<< endl;
CLS a(0);
cout<<"\n"<<a.m_i<< endl;
return 0;
}

#include<iostream>
using namespace std;
class CLS
{public:
int m_i;
CLS(int i){m_i=i;}
CLS()
{
CLS(0); //你在这里是创建了一个CLS对象而已,并没有将原来的m_i赋值...所以第一个输出的就是任意数.
}
};
main()
{
CLS obj;
cout<<obj.m_i<< endl;
CLS a(0);
cout<<"\n"<<a.m_i<< en