虚函数 vs 纯虚函数

在 C++ 中,虚函数Virtual Function)和纯虚函数Pure Virtual Function)是实现多态性的两个重要概念。它们都是在类中声明的,用于支持运行时多态性,但有一些关键的区别。

1. 虚函数(Virtual Function)

  • 定义:虚函数是在基类中使用 virtual 关键字声明的成员函数,它可以在派生类中被重写(Override)。

  • 功能:虚函数允许通过基类指针或引用来调用派生类的实现,支持运行时多态性。

  • 实例化:包含虚函数的类可以被实例化。

  • 语法

class Base {
public:
    virtual void show() { // 虚函数
        std::cout << "Base class show function." << std::endl;
    }
};

2. 纯虚函数(Pure Virtual Function)

  • 定义:纯虚函数是在基类中声明为虚函数,并在声明时将其初始化为 0,例如:

virtual void functionName() = 0;
  • 功能:纯虚函数强制要求派生类必须提供具体实现,使得基类成为抽象类。抽象类不能被实例化。

  • 实例化:包含纯虚函数的类不能被实例化,只能作为基类使用。

  • 语法

3. 主要区别

特征
虚函数
纯虚函数

定义

在类中使用 virtual 声明

在类中使用 = 0 声明

实例化

可以被实例化

不能被实例化

需要实现

可以选择性地在派生类中重写

必须在派生类中实现

类的类型

普通类

抽象类

默认实现

可以有默认实现

没有实现

4. 示例代码

下面是一个简单的示例,演示虚函数和纯虚函数的使用:

5. 总结

  • 虚函数是允许派生类重写的成员函数,可以被实例化的类。

  • 纯虚函数是必须在派生类中实现的函数,使得基类成为抽象类,不能被实例化。

这两个概念是 C++ 中实现多态性的核心,通过它们,程序员可以编写更灵活和可扩展的代码。

Last updated