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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容

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