谈到封装,我们这里指的是对类的成员的私有化,其实究其根本做的比较多的是对成员变量隐藏。
private 关键字的作用在于更好地隐藏类的内部实现,我们可以成为“私有”。它与我们之前看到的public属于同一类的关键字。
C++设计规范要求,实际项目开发中的成员变量以及只在类内部使用的成员函数(只被成员函数调用的成员函数)都建议声明为 private,而只将允许通过对象调用的成员函数声明为 public。
对于访问权限限定符:public、private、protected我们将在后面继承中给大家细说。
封装,即对类中的成员变量进行private私有化的修饰,隐藏其可见性,如果类外想进行访问,可以通过setXXX函数和getXXX函数进行成员变量的赋值和取值。
基本的要求是针对每一个private封装的成员变量要有一对set函数和get函数与其对应,函数名以get或set开头,后接成员变量名,如 setAge(int age),getAge()。
例如:
#include<iostream>
using namespace std;
class Member
{
private:
string name;
double salary;
public:
void setName(string name);
string getName();
void setSalary(double salary);
double getSalary();
};
void Member::setName(string name)
{
this->name = name;
}
string Member::getName()
{
return this->name;
}
void Member::setSalary(double salary)
{
this->salary = salary;
}
double Member::getSalary()
{
return this->salary;
}
int main()
{
Member m;
m.setName("张三");
cout << m.getName() << endl;
return 0;
}
this是一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员。
this->name 指定的是当前对象的成员变量name。
注意:
1、this是const指针,它的值是不能被修改的,修改该指针的操作都是不允许的,如赋值、递增、递减等。
2、this 只能在成员函数内部使用,用在其他地方没有意义,也是非法的。
3、只有当对象被创建后 this 才有意义,因此不能在 static 成员函数中使用,后续会讲到 static。
从编译器的原理来说,this 实际上是成员函数的一个形参,在调用成员函数时将对象的地址作为实参传递给 this。
这个形参是隐式的,它并不出现在代码中,而是在编译阶段由编译器将它添加到参数列表中。
this 在我们程序中主要是区别成员变量和局部变量。
说到这两个形式的变量,我们就来总结下
(1)位置不同
成员变量:类中函数外
局部变量:函数定义中或者函数声明上
(2)在内存中的位置不同
成员变量:在堆中
局部变量:在栈中
(3)生命周期不同
成员变量:随着对象的创建而产生,随着对象的销毁而消失
局部变量:随着函数执行到该变量产生,随着函数的执行完毕而消失