C++ 静态数据成员究竟是否可以受private控制?

程序员面试秘笈一书中 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;
}

请辩证的看待我的回答,如果有人理解为什么会出现这种错误可以在底下留言。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值