嵌入式面向对象程序开发·C++多态

第十课、C++多态

一、多态介绍

1、定义:由继承而产生的相关的不同的类,其对象对同一消息会作出不同的响应。

2、作用: (1)增加程序的灵活性;

(2)减轻系统升级维护调试的工作量和复杂度

(3)提高代码的扩展性。

3、分类:静多态(编译时绑定)、动多态(运行时绑定)。

   注:函数重载,也是一种多态现象,通过命名倾轧在编译阶段决定,故称为静多态

4、多态形成的条件(前提):

(1)父类中有虚函数;

    (2)子类覆写父类中的虚函数;

(3)通过已被子类对象赋值的父类指针或引用,调用共用接口。

 注:用一个基类对象接受子类对象无法发生多态,只有基类指针接收子类对象的地址或指针,才会发生多态。

 

二、virual虚函数

1、注意事项:

(1)基类中用virual 声明成员函数为虚函数类外实现虚函数时,不必再加virtual

(2)在派生类中重新定义此函数称为覆写,要求函数名,返值类型,函数参数个数及类型全部匹配

(3)为了避免在派生类写错虚函数,可在派生类里的虚函数中添加override修饰,确保该函数为虚函数并覆写来自基类的虚函数。

嵌入式面向对象程序开发·C++多态

 

2、若干限制:

(1)只有类的成员函数才能声明为虚函数;

(2)静态成员函数不能是虚函数;

(3)内联函数不能是虚函数;

(4)构造函数不能是虚函数;

(5)析构函数可以是虚函数且通常声明为虚函数

注:何时需要虚析构函数?

当通过基类指针删除派生类对象时,若打算允许其他人通过基类指针调用对象的析构函数(通过delete这样做是正常的) , 并且被析构的对象是有重要的析构函数的派生类的对象,就需要让基类的析构函数作为虚函数。

3、工程意义:实现了多态,即使用同一个实例、调用同一个接口产生不同效果,或者使用同一接口传递不同实例、执行不同操作。

三、纯虚函数

1、定义:virtual 函数名(形参) = 0;

注:纯虚函数只有声明,没有实现,被“初始化”为0。

2、抽象类

   (1)定义:含有纯虚函数的类,称为抽象基类,不可实列化(即不能创建对象)。

   (2)作用(接口):被继承,提供族类的公共接口。

注:纯虚函数,而在派生类中没有对该函数定义,则该虚函数在派生类中仍然为纯虚函数,派生类仍然为纯虚基类。