Boolan网——C++微专业第三周学习笔记

在本周首先学习了面向对象编程的三种主要模式:composition 复合delegation 委托以及inheritance 继承

(1)composition 复合

在一个类中,以另一个类作为数据成员,这种类与类之间的关系被称之复合。

在上图中,使用了类模板的概念。使用class Sequence = deque<T>,类似于typedef。将deque替换至代码中:

在面向对象之前,复合就已经存在了。例如C语言中的结构,结构中就可以存放其他类型的结构。

注意使用图表示类与类之间的关系:


queue拥有deque,其中的所有的功能都是调用的deque中的功能,属于一个特殊的例子。queue是一个先进先出的队列,而deque为两端都能进出的队列。deque的功能比queue的功能强大。deque的部分功能向queue开放。该设计模式称之为Adapter(适配器)。

从内存角度解释composition:

由Itr至deque至queue,依次能够推断出内存的大小。

在复合模式下的构造与析构:

红色部分代码是编译器自动添加的。注意使用的默认构造函数。否则需要手动添加合适的构造函数。

(2)delegation 委托

委托严格意义讲也是一种复合,但是是通过指针来进行复合的形式。其中包含指针,所以注意big three。两个类通过指针关联,两个类的生命周期不同,不是同步的。

左侧可以作为对外的接口,被称之为pimpl。Pimpl(pointer to implementation, 指向实现的指针)是一种常用的,用来对“类的接口与实现”进行解耦的方法。这个技巧可以避免在头文件中暴露私有细节,因此是促进API接口与实现保持完全分离的重要机制。但是Pimpl并不是严格意义上的设计模式(它是受制于C++特定限制的变通方案),这种惯用法可以看作桥接设计模式的一种特例。Handle中的指针可以指向任意类,右侧的变动不会影响左侧,也就不会影响客户端。此手法也被称之为编译防火墙。

(3)inheritance 继承

三种模式中,继承是最为重要的模式。通过继承联系在一起的类构成一种层次关系,同在在层次的根部有一个基类,其他类则直接或者间接地从基类继承而来,这些集成得到的类为派生类。基类负责定义在层次关系中所有类共同拥有的成员,而每个派生类定义各自特有的成员。

通过上图可以看出父类的数据是被完整继承下来的。

对于继承关系中的构造与析构函数,主要注意以下两点:

<1>构造与析构的顺序;

<2>基类中的dtor必须是virtual,否则会出现undefined behavior。

在完成面向对象的三种基本模式的学习之后,对虚函数以及几种设计模式进行讲解:

(4)虚函数

通过以下例子对虚函数有了更为深刻的理解:

Serialize为读文件,其中无法统一,继承自父类,为虚函数。通过上述方式,父类中的动作(Serialize)延缓至子类中实现。该设计模式为Template Method。

(5)inheritance与composition下的构造与析构,应当记住其相对应的顺序

(6)设计模式

Delegation +Inheritance 模式下的Composite模式:

以及Delegation +Inheritance 模式下的Prototype模式:Prototype 模式提供了自我复制的功能,就是说新对象的创建可以通过已有对象进行创建。

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

推荐阅读更多精彩内容