Inheritance(继承),Composition(复合),Delegation(委托)
Composition:has-a
构造函数和析构函数(红色圈起来的表示has a)。如果不显式初始化Container,默认情况下会自动调用Component的构造函数和析构函数。
Deligation(委托):Composition by referrence
个人认为,通过类指针实现has-a。使用指针时注意NULL指针及相关的delete。
Inheritance(继承):is-a
使得继承“活过来”的是虚函数。
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>,因为一个集合中可以有很多元素,而不是只有一个 int。
prototype 模式(这个模式技巧点比较多,复习时建议看视频)
应用场景:父类可以控制未来的子类C++面向对象高级编程(上) - 网易云课堂
注意:
类的构造函数是私有的,需要类的static函数实例化,或者类本身就有一个static 成员,在编译的时候就已经产生了这种类。视频中通过私有的构造函数控制子类的权限,通过父类的clone虚函数创建子类对象。
私有的构造函数解释:http://www.jianshu.com/p/afffb7cccd6d
老师推荐书籍:design patterns explained simply