4. C++ 封装

谈到封装,我们这里指的是对类的成员的私有化,其实究其根本做的比较多的是对成员变量隐藏。

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)生命周期不同
成员变量:随着对象的创建而产生,随着对象的销毁而消失
局部变量:随着函数执行到该变量产生,随着函数的执行完毕而消失

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • C++文件 例:从文件income. in中读入收入直到文件结束,并将收入和税金输出到文件tax. out。 检查...
    SeanC52111阅读 7,928评论 0 3
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,799评论 1 32
  • 重新系统学习下C++;但是还是少了好多知识点;socket;unix;stl;boost等; C++ 教程 | 菜...
    kakukeme阅读 20,148评论 0 50
  • 五月临近 你在悠悠地开 我们将再次相遇人海 相遇在每一个你途径的路旁 你着一身绿装 白色的衬衣得体而大方 你静静地...
    刘炳清阅读 3,717评论 1 6
  • 大概春节前不久,有好友在圈里发个起早打卡的链接,我这种什么都好新鲜的人顺手加入,不就十块钱吗?不够一个盒饭的! 好...
    卉19253阅读 1,709评论 0 1