C++ 静态数据成员能不能受private控制符的作用

学习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”的声明

注释掉此行后,程序可以正常运行:

《C++ 静态数据成员能不能受private控制符的作用》

所以,结论得出,静态数据成员是要受private控制符影响的

书上是错误的

请读者注意

学习之路,漫长而艰辛,相信自己,坚持住,肯定可以成功的。

    原文作者:freepenix
    原文地址: https://blog.csdn.net/u014513151/article/details/48136717
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞