程序员面试秘笈一书中 169页刚说可以用private隐藏信息 ,又在173就说private 控制不了静态数据成员。
那么到底能不能控制?
我的答案是:可以隐藏信息(禁止获取或修改),但是控制不了(还可以初始化)
1、private控制不了private静态数据成员在类外初始化
#include <iostream>
using namespace std;
class test
{
public:
void print();
private:
static int j;
};
int test::j = 10;
void test::print()
{
cout << "j = "<< j << endl;
}
int main()
{
test t;
t.print();
return 0;
}
运行显示:j=10
2、private可以禁止获取(隐藏信息)
#include <iostream>
using namespace std;
class test
{
public:
void print();
private:
static int j;
};
int test::j = 10; //13行
test::j = 120;//会显示private不能赋值错误(也就是第13行)。删去该行赋值则13行无错。
void test::print()
{
cout << "j = "<< j << endl;
}
int main()
{
test t;
cout<<test::j;
//会显示private不能赋值错误(也就是第13行)。删去cout则13行无错。
cout<<t.j;
//错误同上
return 0;
}
请辩证的看待我的回答,如果有人理解为什么会出现这种错误可以在底下留言。