读书人

C++类 成员数据初始化,该如何处理

发布时间: 2012-04-30 22:33:26 作者: rapoo

C++类 成员数据初始化
class Date{
Date() {}
public:
int i;
int j;
};
int main()
{

Date w;//这里有错误
cout<<w.i<<endl<<w.j<<endl;
system("pause");
return 0;
}:
我想测试下默认构造函数不对i,j赋值时,i和j有没有被自动初始化为0,但是这个程序有错误: error C2248: “Date::Date”: 无法访问 private 成员(在“Date”类中声明)
谁能帮我解决下这个问题?谢谢

[解决办法]
class Date{
public:
Date() {}
int i;
int j;
};
[解决办法]
因为你的默认构造函数的访问属性为private当然编译 不过
[解决办法]
class Date{
public:
Date() {}
public:
int i;
int j;
};
c++ class默认的权限是private
[解决办法]
没定义构造函数,缺省为private,因此出错
[解决办法]
你的构造函数是私有的,不让这样用
[解决办法]
你的构造函数是private,Date w的时候会调用默认的构造函数,但是由于你的构造函数是private,无法在类外调用,所以会出错!!
[解决办法]

探讨

嗯,是的。运行结果i和j都是-858993460.不是说内置类型在局部不会自动初始化吗?为什么给赋了值?
int b;
int main()
{
int w;
cout<<b<<endl;//输出为0
cout<<w<<endl;//输出空
return 0;
}引用:

class Date{
public:
Date() {}
pu……

[解决办法]
构造函数在默认情况下是私有的,不可以在外部函数进行访问,
[解决办法]
Date w;时会调用构造函数。而你的构造函数没有指明访问控制属性,默认为私有,是不能在类外访问的,因此出错。一般应该将构造函数声明为public。
另外,i,j作为类的成员变量,构造函数不对其做初始化的的话,编译器会为其指定一个绝对值很大的负值。
这样做是为了在程序运行过程中便于发现错误。i,j都指定为0的话不易发现错误。

读书人网 >C++

热点推荐