-Inheritance(继承)
-Composition(复合)
-Delegation(委托)
复合关系下的构造和析构
构造由内而外
例如:Container has-a Component
Container的构造函数首先调用Component的default构造函数,然后才执行自己.
Container::Container(...):Component(){};
析构由外而内
例如:Container has-a Component
Container的析构函数首先执行自己,然后才调用Component的析构函数.
Container::~Container(...){...~Component};
需要注意的是以上都是默认情况下编译器自己添加的代码,如果实际上不是需要default构造函数或者析构函数,需要自己显示的写上对应的构造和析构函数.
Delegation(委托).Compositon by reference
Handle/body(pimpl)
Inheritance(继承),表示 is-a
base class 的dtor必须是virtual,否则会出现undefined behavior
我试过没写virtual,情况是base类指针指向子类实例,删除指针并没有调用子类的析构函数,造成内存泄漏.
构造由内而外
首先调用Base的default构造函数,然后才执行自己.
析构由外而内
首先执行自己,然后调用Base的析构函数
注意以上同复合的default情况是一样的
Inheritance with virtual functions
non-virtual 函数:你不希望 该函数被重新定义
virtual函数:你希望该函数重新定义,你对他已有默认定义.
pure virtual:你希望该函数一定要重新定义,你对它没有默认定义
Inheritance+Composition 关系下的构造和析构
原则:
先构造父类,再构造成员变量、最后构造自己
先析构自己,在析构成员变量、最后析构父类
设计模式
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
桥接模式别名是Handle/body
组合模式是典型的树形结构,结合我自己做过的例子:
一个图形是由点和线构成的,线又是由点构成的,点是最小的颗粒,这种情况就适合用组合模式.
原型模式,我的理解是,它主要面对的问题是:“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。
希望有帮助.