C++中类的组合(BOOLAN教育)

Inheritance(继承),Composition(复合),Delegation(委托)

Composition:has-a

构造函数和析构函数(红色圈起来的表示has a)。如果不显式初始化Container,默认情况下会自动调用Component的构造函数和析构函数。


C++中类的组合(BOOLAN教育)_第1张图片

Deligation(委托):Composition by referrence

个人认为,通过类指针实现has-a。使用指针时注意NULL指针及相关的delete。


Inheritance(继承):is-a

C++中类的组合(BOOLAN教育)_第2张图片

使得继承“活过来”的是虚函数。

virtual函数:derived class可以override 并且自己有默认的定义;

pure virture函数:virtual void fun() const=0;derived class必须重新定义虚函数。

扩展:《C++ primer》

P527动态绑定;

P530(derived-to-base),成立条件P544;

派生类向父类转换,这样可以使用父类指针调用派生类的虚函数!

———————————————————————————————————

Delegation+Inheritance:委托+继承

composite模式:

应用场景:元素和集合,集合由集合和元素组成。

注意:primitive对应元素,但元素中没有数据,而是Componet保存元素的数据,primitive对Component中的数据赋值。Composite对应集合,集合的作用是建立集合(通过父类指针Componet)。ps:Componet中的私有数据最好是vector,因为一个集合中可以有很多元素,而不是只有一个 int。


C++中类的组合(BOOLAN教育)_第3张图片

prototype 模式(这个模式技巧点比较多,复习时建议看视频)

应用场景:父类可以控制未来的子类C++面向对象高级编程(上) - 网易云课堂

注意:

类的构造函数是私有的,需要类的static函数实例化,或者类本身就有一个static 成员,在编译的时候就已经产生了这种类。视频中通过私有的构造函数控制子类的权限,通过父类的clone虚函数创建子类对象。

私有的构造函数解释:http://www.jianshu.com/p/afffb7cccd6d

老师推荐书籍:design patterns explained simply

你可能感兴趣的:(C++中类的组合(BOOLAN教育))