美文网首页
《C++沉思录》学习笔记二

《C++沉思录》学习笔记二

作者: Yep卖萌的小贱贱 | 来源:发表于2018-05-17 15:29 被阅读0次

代理类:

我们需要一个容器,来存储类型不同但彼此相关的对象。

1.抽象基类,所有成员函数为纯虚函数,不能创建这种类型的对象数组。
在声明中对虚函数写=0,明确声明这些函数可以空着不定义。因此,只有从这个抽象基类派生出来的类才能够实例化,这个抽象基类本身不会有对象。既然抽象基类对象不存在,当然也就不可能有其对象数组。

2.抽象基类。成员函数没有纯虚函数,可以创建这种类型的对象数组,但是不能和派生类进行转换。
将一个派生类对象赋给这个基类对象的数组元素,会导致把派生类对象转换成一个基类对象,同事会丢失掉所有在积累中没有的成员。等于将派生类进行了裁剪放入数组中去。

经典解决方案:
提供一个间接层。
最早的合适的间接层形式就是存储指针,而不是对象本身。定义抽象基类类型的指针数组,将派生类对象取地址赋予数组元素进行存储。
问题在于:
1.当派生类对象是局部变量的时候,一旦出了这个局部,那么数组中元素的指向变成不确定的了。
当然我们可以在局部去new一个该对象的副本,然后存储这个副本对象的地址。这会造成动态内存管理的负担。
2.另外,当两个元素指向同一个对象的时候,会出现释放的问题...

虚复制函数:
在抽象基类中定义一个纯虚函数,例如 virtual BaseClass* copy() const = 0;
在每个派生类vp中新增了一个新的成员函数copy, vp->copy()会获得一个指针,该指针指向该对象的一个新建副本。如 BaseClass DerivedClass::copy() const { return new DerivedClass(this)}。当然处理完一个对象之后,需要清楚掉该对象。那么我们要确保BaseClass类有一个虚析构函数。

定义代理类:
BaseClassSurrogate默认构造函数
BaseClassSurrogate拷贝构造函数
BaseClassSurrogate拷贝BaseClass构造函数
BaseClassSurrogate赋值操作符函数
补上其它函数

代理类1.jpg 代理类2.jpg 代理类3.jpg

相关文章

  • 《C++沉思录》学习笔记二

    代理类: 我们需要一个容器,来存储类型不同但彼此相关的对象。 1.抽象基类,所有成员函数为纯虚函数,不能创建这种类...

  • 《C++沉思录》学习笔记一

    只有在程序通过指向基类对象的指针或者基类对象的引用调用虚函数时,才会发生运行时的多态现象。 类设计者的核查表1.你...

  • 沉思录—学习笔记

    在马克西莫斯身上,我学到了内心自我掌控的能力,并不会被心外之物所影响与左右。 不论遇到什么样的环境,包括卧病不起在...

  • 《C++沉思录》读书笔记

    1.小项目比大项目效率可能更高,接口开发2.重新思考类设计和封装的合理性(检查出错和漏洞)3.做核查表(类,数据测...

  • 2023-02-08

    《C++沉思录》真是本好书,书中句柄部分的内容,增加了我对binder通讯c++部分思想的理解。

  • 沉思录阅读笔记二

    不要为将来担忧。如果你必须去到将来,你会带着同样的理由去的,恰似你带着理由来到现在。一个人不管别人的言行思想是否正...

  • 《第一哲学沉思录》读书笔记

    《第一哲学沉思录》 以下是关于笛卡尔《第一哲学沉思录》的笔记,主要内容在对第五个沉思的分析。虽然文章比较简陋支离,...

  • HIDL实战笔记

    目录 第一篇:HIDL学习笔记之HIDL C++(第一天)第二篇:HIDL学习笔记之HIDL C++(第二天)第三...

  • 抽象《c++沉思录》

    抽象是有选择的忽略。比如你要驾驶一辆汽车,但你又必须时时关注每样东西是如何运行的:发动机、传动装置、方向盘和车轮之...

  • 沉思录笔记

    人是一种理性动物,也是一种政治动物,一种社会动物。 人作为宇宙的一部分、个人作为社会的一部分,对于来自整体的一切事...

网友评论

      本文标题:《C++沉思录》学习笔记二

      本文链接:https://www.haomeiwen.com/subject/cdtbdftx.html