当我们不手动调用构造函数时,我尝试检查为数据成员分配了哪些值。我的a和b均为0,但c的值为1,那么如何初始化数据成员?随机还是0?如果将它们初始化为0,为什么我看到1作为c的值?
#include<iostream>
using namespace std;
class Class
{
public:
int a,b,c;
};
int main()
{
Class obj;
cout<<obj.a;
cout<<"\n";
cout<<obj.b;
cout<<"\n";
cout<<obj.c;
return 0;
}
输出为 0 0 1
但是我期望 0 0 0
答案 0 :(得分:0)
如here所述,您所用的默认初始化将导致“不确定”,即未定义的值。
编译器将为您提供默认的构造函数,因为您尚未自己定义它,也未定义任何其他构造函数(在这种情况下,它将删除它),但是默认的构造函数仍会使成员值未定义。您得到0和1-我得到的数字更像1515788312
。
使用C ++ 11标准,您可以通过直接在类中提供默认值来防止这种情况,
#include<iostream>
using namespace std;
class Class
{
public:
int a = 0, b = 0, c = 0;
};
int main()
{
Class obj;
cout<< obj.a << " "
<< obj.b << " " << obj.c << endl;
return 0;
}
在这种情况下,值将被初始化为您设置的值。要实现同一目的,您还可以简单地提供自己的默认构造函数,
#include<iostream>
using namespace std;
class Class
{
public:
Class() : a(1), b(2), c(3) { }
int a, b, c;
};
int main()
{
Class obj;
cout<< obj.a << " "
<< obj.b << " " << obj.c << endl;
return 0;
}
请注意,由于可能发生名称冲突,请避免使用using namespace std
。请改用个别的using
陈述式-像cout
这样常用的陈述式。为了清楚起见,我对程序进行了一些更改。另外,您的问题的答案可以在各种C ++书中找到很好的解释,例如我使用的Lippman的Primer。