Boolan C++笔记 三

-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)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。

使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。


组合模式Composite(结构型)

Prototype Pattern(原型模式)

设计模式-----桥接模式(Bridge Pattern)

桥接模式别名是Handle/body

组合模式是典型的树形结构,结合我自己做过的例子:

一个图形是由点和线构成的,线又是由点构成的,点是最小的颗粒,这种情况就适合用组合模式.

原型模式,我的理解是,它主要面对的问题是:“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。


希望有帮助.

你可能感兴趣的:(Boolan C++笔记 三)