学习C++过程中,遇到一道问题:
下面对静态数据成员的描述中,正确的是: A.可以在类内初始化 B.不能被类的对象调用 C.不能受private修饰符的作用 D.可以直接用类名调用
本以为是很简单的一道问题,类中变量,受private操作符作用应该是没有质疑的,但是我所看到的书中(人民邮电出版社《C和C++程序员面试秘笈》,感觉还是挺好的~),答案C是正确的(当然还有D,D没有争议)
而网上大多是认为C是错误的
有语云:治学要严谨。所以我决定自己写段代码观察下
代码:
#include <iostream>
#include <conio.h>
using namespace std;
class test
{
public:
static int i;
test() {}
void print();
private:
static int j;
};
int test::i = 0;
int test::j = 0;
void test::print()
{
cout << "i = "<< i << endl;//对比参照项1
cout << "j = "<< j << endl;//对比参照项2
}
int main()
{
test t;
t.print();
cout << "i = "<< t.i << endl;//对比参照项3
cout << "j = "<< t.j << endl;//测试是否可以不受private作用
getch();
return 0;
}
编译平台:
win7 + vs2012
cout << "j = "<< t.j << endl;
此行编译时报错:
1>c:\…\visual studio 2012\projects\test25\test25\源.cpp(30): error C2248: “test::j”: 无法访问 private 成员(在“test”类中声明)
1> c:\…\visual studio 2012\projects\test25\test25\源.cpp(12) : 参见“test::j”的声明
1> c:\…\visual studio 2012\projects\test25\test25\源.cpp(6) : 参见“test”的声明
注释掉此行后,程序可以正常运行:
所以,结论得出,静态数据成员是要受private控制符影响的
书上是错误的
请读者注意
学习之路,漫长而艰辛,相信自己,坚持住,肯定可以成功的。