虚函数与多态

一、概念

1.多态定义:

多态是对程序通用性的追求,同一名称实现不同的功能,达到行为标识同一。

2.多态的实现:

编译时(静态)的多态:

  • 通过函数重载运算符重载实现
  • 这种多态是静态

运行时(动态)的多态 :

  • 通过类继承关系虚函数实现
  • 这种多态是动态
  • 程序执行前,无法根据函数名和参数来确定该调用哪一个函数
  • 执行过程中,根据执行的具体情况来动态地确定

二、虚函数

1.虚函数定义:

 虚函数必须是类的成员函数,使用关键字virtual说明

2.定义格式:

virtual 返回类型 函数名(参数表)
{
    ...
};

 2.虚函数的继承性:

  • 虚函数具有继承性。基类中声明了虚函数,派生类中无论是否说明,同原型函数都自动为虚函数
  • 因此,在派生类中重新定义虚函数时,不必加关键字virtual
  • 在派生类中重新定义虚函数时,不仅要同名参数列表和返回类型也必须全部与基类中的虚函数一样,否则会被认为是重载,而不是虚函数

 3.注意:

  •  若虚函数的定义形式为类内定义,类外声明。“virtual”就只用于类内声明,类外定义不使用“virtual”。
  • 虚函数仅适用于有继承关系的类对象,只有类的成员函数才能说明为虚函数
  • 类中的静态成员函数为同一类对象共有,不限于某个对象,不能作为虚函数
  • 因为在调用构造函数时对象还没有完成创建,所以构造函数不能定义为虚函数
  • 析构函数可以定义为虚函数,通常把析构函数定义为虚函数,实现撤销对象时的多态。

 4.多态VS类型兼容:

 

5.纯虚函数

 纯虚函数是类的成员函数,类内的定义格式如下:

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

有时,定义基类不是为了衍生基类对象,而是为了建立一个通用模板,派生出一系列子类或者为动态多态提供操作接口。

为了解决以上问题,可以将基类的成员函数定义为纯虚函数。

6.抽象类VS纯虚函数

虽然纯虚函数没有实现代码,但它为动态多态提供了操作接口

含有纯虚函数的类称为抽象类

抽象类无法实例化,不能生成对象

继承了抽象类的派生类可以依照本类的特性完成纯虚函数的定义,然后产生对象

如果继承了抽象类的派生类不完成纯虚函数的定义,派生类也成为抽象类

三、多态作用

 基类派生出多个子类,这些派生类和基类一起构成了类的“家族”

多态提供了基于类族的通用操作接口

提升了程序的通用性,针对某一个类写出一段程序,这段程序可以适用于该类的所有派生类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值