访问权限
使用成员函数来操作对象,而不是成员变量
上一节我们看到,可以定义类来将一类事物的属性和方法放到一起,然后创建该类的对象,通过访问对象的属性和方法成员来操作对象。但是直接修改对象的属性并不是一个好主意。有些属性值是不被允许的,比如,使用上一节定义的人类时,设置age值的时候可能将它设置为负数:
int main()
{
Human p;
...
p.age = -20;
...
}
有些属性值之间是相互关联的,比如,如果Human类还有体力属性,该属性值是与年龄属性值相关的,那么直接修改年龄值而不修改体力值也是错误的。
从上面简单的例子就可以看到,通过成员变量来操作对象是不明智的,应该要通过成员函数。相比于成员变量,成员函数可以封装更加复杂的逻辑。在类的使用者眼里,类提供了各种成员函数来完成各个功能,只要知道成员函数的调用方式(成员函数声明、或者称为类的接口),不需要知道类的成员变量以及成员函数的实现(类的实现)。
这就是设计类时的一个原则:公开(函数)接口,隐藏(内部)实现。
因此,要修改对象的属性值(这也属于“操作对象”),可以给类添加访问属性值的“set”和”get”函数
#include <iostream>
#include <string>
using namespace std;
class Human{
public:
string name;
bool is_male;
int age;
string id;
void introduce();
void read();
// 设置年龄
void set_age(int a){
age = a;
}
// 获知年龄
int get_age(){