c++笔试题

来源:百度知道 编辑:UC知道 时间:2024/06/01 01:32:03
以下代码中的输出语句输出0吗,为什么?[C++易]
struct CLS
{
int m_i;
CLS( int i ) : m_i(i) {}
CLS()
{
CLS(0);
}
};
CLS obj;
cout << obj.m_i << endl;

你可能和Java构造器的调用混淆了

在C++中,构造函数只能调用一次,而且是创建对象时调用的
比如:
CLS obj1; //创建对象obj1,调用无参构造函数CLS()

CLS obj2(3); //创建对象obj2,调用含参构造函数CLS( int i )

CLS(4); //创建了一个没用名字的对象,由CLS( int i )创建
//创建后也不能引用,因为不像上面那样有名字,obj1,obj2

你这段代码
CLS()
{
CLS(0);
} 中的 CLS(0); 就属于第三种情况,是创建了一个无名的新对象,并不是在创建当前对象时候调用该对象的另一个构造函数来共同初始化当前对象。

这和Java不同,Java里可以在一个构造器里面调用本类的另一个构造器来共同完成当前对象的初始化,Java中这样用是完成同一个对象的初始化(不过要把CLS(0)写成this(0),还可以再在CLS(int i)中再调用另外的构造器,如CLS(int i,int j)来共同完成同一对象的初始化,要注意不要循环调用,即不要在CLS(int i)中又调用CLS() )----扯远了,嘿嘿

-858993460
Press any key to continue

答案不输出

我很好奇,为什么不报错
构造函数为什么可以显示调用,- -|||

如果你在一个构造函数中调用了另一个构造函数,编译器将初始化一个临时局部对象;而不是初始化this对象。

楼上正解