C++中的虚函数与纯虚函数

本文详细介绍了C++中虚函数和纯虚函数的概念、定义、规则以及它们在实现多态和抽象类中的作用。特别强调了派生类必须重写基类的虚函数,纯虚函数需在派生类中实现,以及抽象类的使用注意事项。
摘要由CSDN通过智能技术生成

C++中的虚函数纯虚函数都是实现多态的重要机制。

一、 虚函数
1.1 虚函数的定义

虚函数就是在类中被关键字virtual声明(不是定义)的函数,一般只在基类中声明虚函数。

virtual 返回值类型  函数名(形参表)
{
	函数体
}
例如:virtual void func();

1.2 虚函数定义时遵循的规则

  • 虚函数必须是类的成员函数,不能是类的静态成员函数或友元函数。因为虚函数的调用需要靠特点的对象来确定需要调用哪一个函数;
  • 在派生类中必须对基类中的虚函数进行重写override,即在派生类中重新定义与基类中虚函数;
  • 构造函数不可以是虚函数。因为构造函数是在对象创建时自动运行的,而虚函数是为了实现多态性,即根据不同的对象在运行过程中才决定与哪个函数建立联系,因此构造函数不可以是虚函数;
  • 析构函数可以声明为虚函数;
  • 基类中的虚函数不论被公有继承多少次,在多级派生类中仍然是虚函数,派生类中的虚函数可以省略virtual,父类中不可省略;
  • 必须使用基类指针访问虚函数,才能获得运行的多态性 。虽然可以使用对象名和点运算符的方式来调用虚函数,但是这种调用是在编译时进行的,是静态联编,不能利用虚函数的好处;
  • 可以使用基类的指针或引用来访问派生类中的同名函数。

二、纯虚函数
2.1 纯虚函数的定义
纯虚函数是一种特殊的虚函数,它没有函数体,需要在派生类中进行实现。纯虚函数的定义是在虚函数的声明后面加上“=0”即可。

virtual void func() = 0;

包含纯虚函数的类称为抽象类,抽象类不能实例化对象,只能用于派生其他类。
**注意:**纯虚函数必须在派生类中实现,否则派生类也会变为抽象类。若在派生类中不想实现某个纯虚函数,可以将其声明为虚函数,并提供一个默认实现。这个默认实现可以是一个空函数体,也可以是一个具体的实现。
2.2 纯虚函数的作用
使派生类仅仅只是继承函数的接口,即通过在基类中定义一组纯虚函数,可以明确指定子类必须实现的方法。
三、 抽象类
3.1 抽象类的定义
抽象类是一种特殊类,包含纯虚函数的类称为抽象类。

class Person
{
 public:
    virtual void show() = 0;
};

如示例所示,Person类是一个抽象类。
3.2 抽象类使用时的注意事项

  1. 抽象类不能实例化对象;
  2. 若在派生类中没有重新定义纯虚函数,而只是继承基类的纯虚函数,派生类仍然为抽象类。

**注意:**在基类中定义一个函数为虚函数,不代表该函数不被实现。定义为虚函数为了实现可以用基类的指针来调用子类中的函数;若在基类中定义一个函数为纯虚函数,该函数不在基类中实现。

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值