C++学习(5)

组合与继承

Composition组合,表示has a

queue只开放了deque的部分功能,adapter适配器模式

组合之下的构造和析构

构造由内而外,先构建里层一层一层构建

Container的构造函数首先调用Component的default构造函数,然后才执行自己

析构由外而内,先剥掉外层再一层一层往里

Container的析构首先执行自己,然后才调用Component的析构函数。

注:以上红色操作都由编译器自动完成,这里剖析其执行次序

Delegation(委托,聚合)Composition by reference

只有一个指针指向对方,但是什么时候拥有它,看情况。

组合:有了外部就会有内部

聚合:有了外部,等需要内部的时候再去创建它

Handle/Body  pimpl:所有的功能都由那个指针完成。

引用计数,共享内存,更改时复制一个副本,copy on write

Inheriance(继承)表示is a

继承关系下的构造和析构

base class的dtor必须是虚函数,否则会出现undefined behavior

构造由内而外

Derived的构造函数首先调用Base的default构造安徽省农户然后才执行自己

析构由外而内

Derived的析构阿寒湖首先执行自己,然后才调用Base的析构函数

Inheritance继承with virtual function虚函数

non-virtual 非虚函数:你不希望derived class重新定义(override,重写)它

virtual 函数:你希望derived class重新定义它,并且你对它已经有默认定义

pure virtual函数:你希望derived class一定要重新定义它,你对它没有默认定义

模板方法 Template Method

Inheritance_Composition关系下的构造和析构

 

Component先然后是Base

Delegation委托+Inheritance继承 (观察者模式)

一个有变化,大家都变化

Subject放数据

Observer观察者

subject包含函数:attach 添加观察者、notify通知观察者

Observer可以被继承:update接受通知后更新数据

委托的相关设计

Delegation(委托)+Inheritance(继承)

组合模式

File系统

Primitive基本的个体

Composition是一个容器:可以放Primitive也可以放自己。

左右都继承Component

Composite即可以包含左边也可以包含右边,所以直接将类型直接定义为其共同的父类。

组合模式:例如文件系统:primitive类比于文件,composite相当于文件夹里面可以放文件也可以放文件夹。

add函数定义成虚函数,primitive可以不要重新add

Prototype

现在的框架要去创建未来的class

 static 自己创造自己的原型,而这个原型必须登记到父类中。static原型的作用是在再程序开始的时候就把自己注册到父类中

 

静态的自己被创建时会调用私有的构造函数(-LandSatImage()),私有的构造函数会调用addPrototype()会把自己挂载到父类的容器中。

子类应该有一个clone:作用可以复制自己。框架父类可以通过刚刚static的原型,调用clone() new自己。

new的时候一定不能再调用静态的那个,所以作者将另一个构造函数加了一个参数。所以clone的时候调用的是有参数的那个构造函数。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值