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

博览网学习笔记:

第三周课程的知识点:

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,笔记见下图:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容