IT@程序员猿媛程序员C++的知识分享

4. C++ 封装

2019-04-02  本文已影响10人  飞扬code

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

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

上一篇 下一篇

猜你喜欢

热点阅读