博览网:C++面向对象高级编程(上)第三周笔记

2017-08-01  本文已影响0人  博览网小学员

博览网学习笔记:

第三周课程的知识点:

11.组合与继承

注意:前两周讲的是单个类的设计,即基于对象编程。

本周是讲类与类之间的关系,即面向对象编程。

类与类的三种关系:

1.复合composition

1)我们举例来解释复合:

我们新建一个类queue,queue中含有deque,因deque功能强大,queue使用的功能,即queue包含deque的功能,我们称之为复合关系。(即只要A含有B,则就是一种复合关系)。次例中queue功能都由deque实现。

其关系可用下图表示:

2)复合的关系下的构造与析构:

上图也可表示为:

构造函数由由内(component)而外(container)!

container的构造函数首先调用component的默认的构造函数,然后执行自己的构造函数。(这部分知识,我么只需要了解即可。编译器会自动帮助我们正确调用函数)

析构,由外(container)而内(component)!

container的析构函数首先执行自己的析构函数,然后调用component的析构函数。(若先执行component的析构函数,则内部崩塌,编译器报错)

2.委托delegation

1)一种特殊的复合关系,不是含有component,而是含有component的指针。

2)表示为:

3.继承inheritance

1)举例:

class a

{

........

}

class b:public a {};

即类b继承类a中的功能,或者说类b是一种类a(子类b中有父类a的成分)。

2)表示为

注意:父类的析构函数必须是虚函数,否则会报错

3)构造与析构函数的执行顺序:

构造函数由内而外:

子类,也即衍生类(derived)的构造函数先调用父类(base)的默认构造函数,然后执行自己的;

析构由内外而内:

子类先执行自己的析构函数,然后才调用父类的析构函数;

12.虚函数与多态

1.初识虚函数:

非虚函数(non-virtual):不希望子类重新定义(override)这个函数;

虚函数(virtual):希望子类重新定义(override)这个函数,且父类以对其进行默认定义,但子类不是必须定义这个函数;

纯虚函数(pure virtual):希望子类一定重新定义(override)这个函数;对其没有默认定义,例:virtual void draw()const=0

2.继承搭配上虚函数才可以强而有力

1).子类可以继承父类的所有内容,包括数据和函数。

2).从内存角度,可以继承数据

3).对于函数,不能从内存角度理解,而是子类继承了父类的函数调用权。

13.委托相关设计

设计模式之composite:

以file system为例:

设计模式之Prototype,笔记见下图:

上一篇下一篇

猜你喜欢

热点阅读