第十二章 多态性与抽象类

第十二章 多态与虚函数

一、多态的概念

向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为

具有不同功能的函数名可以用同一个函数名,以实现用一个函数名调用不同内容的函数

*静态多态和动态多态(编译时的多态性和运行时的多态性)

静态多态的特点:调用速率快、效率高,但缺少灵活性,在程序运行前就已经决定了执行的函数和方法

动态多态的特点:不在编译时确定调用的是哪个函数,只有在程序运行时才动态确定操作所针对的对象。动态多态是通过虚函数实现的。

二、利用虚函数实现动态多态性

  *虚函数的作用

函数重载处理的是同一层次上的同名函数问题,而虚函数处理的是不同派生层次的同名函数问题,前者是横向重载,后者可以理解成是纵向重载。(不同点:同一类族虚函数首部是相同的,而函数重载时的函数是不同的(这里指函数参数个数或类型不同))

 

*静态关联与动态关联(早期关联与滞后关联)

 

*虚函数声明

1.只能用virtual声明类的成员函数,把它作为虚函数

2.一个成员函数配声明为虚函数后,在同一类族就不能再定义一个非virtual 且函数首部相同的函数

3.考虑事项:

(1)如果成员函数在类的继承后出现功能的更改一般声明为虚函数

(2)如果通过基类指针或者引用去访问,则应当声明为虚函数

(3)有时会定义空函数体的虚函数,留给派生类添加

 

*虚析构函数

当基类有非虚析构函数时,只执行基类的析构函数,不执行派生类的析构函数。如果希望能执行派生类的析构函数,可以讲基类的析构函数声明为虚构函数,此时,该基类所有的派生类的析构函数都自动成为虚函数,即使派生类与基类的析构函数名不同。

注:构造函数不能声明为虚函数

 

三、纯虚函数与抽象类

1.纯虚函数概念

对于基类的虚函数不作任何处理的情况的一种简化形式

virtual 函数类型 函数名(参数表)= 0

注意:纯虚函数没有函数体;最后的=0不表示函数返回值为0,只起形式作用;

2.抽象类

含有纯虚函数的类就是抽象类

只用来派生,不用来生成定义对象

四、结论

1.某基类包含一个或多个纯虚函数,就是抽象类

2.抽象类一般不是现实存在的对象的抽象

3.在类的层次结构中,顶层或最上面几层都可以是抽象类

4.抽象基类是本类族的共用接口,或者说是从同一基类派生出的多个类有同一接口,因此,能响应同一形式的消息。

5.如果基类声明了虚函数,则在派生类中出现首部相同的函数均为虚函数(默认)

6.使用虚函数提高了程序的可扩展性。

 

个人笔记,仅供参考,欢迎指教!

未经允许,请勿转载!

posted @ 2017-06-13 17:39  hello_OK  阅读(245)  评论(0编辑  收藏  举报