首先,先来谈谈为什么会有权限控制这一东西?看如下代码
struct Test
{
int a;
int b;
};
int main()
{
Test test;
test.a = 2;
test.b = 3;
test.a = 4;
system("pause");
}
这段代码是不是写起来特别爽,一直写一直爽。好了,此时假设对于这个Test结构体,你在你的项目中已经可能有上千处的地方直接用到了其成员a和b,然后有一天,你需要修改你的变量名,如下:
struct Test
{
int m_a;
int m_b;
};
你可能会想,我不可能会改着东西,这个你是站在你一人开发的角度上思考问题,可能平常很多时候都是多人协作开发的哦,也许这个结构体是他人提供的,这时候也只能随着改。
那么此时对变量进行引用的地方都得随之修改,你可能会想到直接查找替换,但是不管咋样,对于项目而已,只要是大面积的修改代码肯定是有风险在滴,所以一般来说对于这些公开的来说,不太会随意改动。
所以权限控制就来了,C++提供了两个关键字
public:
这个成员哪里都可以用,不用担心被修改,所以,一旦发布成public的成员,是不能够随意改名字的
private:
这个成员只用于内部使用,不要在其他的地方使用(编译器检测)
public/private可以修饰成员变量,也可以修饰成员函数
下面我们改进代码:
struct Test
{
private: //表示以下为私有权限
int m_a;
int m_b;
};
int main()
{
Test test;
//test.m_a = 2; // err 成员 "Test::m_a" (已声明 所在行数 : 41) 不可访问
//test.m_b = 3;// err 成员 "Test::m_b" (已声明 所在行数 : 41) 不可访问
system("pause");
}
此时在外部直接使用成员变量会直接报错,这里编译器帮我们限制了访问,那么此时疑问可能又来了,定义了结构体的成员变量为私有,那么我们既不能直接获取数据,也不能修改数据,有啥子用?
别急,我们不可以直接访问或者修改,那可以间接进行操作,可以给出两个对应的访问和修改的公有函数(接口)供他人修改,看如下代码:
struct Test
{
private:
int m_a;
int m_b;
public: //以下成员函数声明
int getA();
void setA(int a);
int getB();
void setB(int b);
};
// 下面为成员函数的实现
// 函数名前面需要加作用域,用于区分普通全局函数
//获取变量m_a数据
int Test::getA