398 字
2 分钟
13纯虚函数
2025-02-15

纯虚函数#

在C++中,虚函数提供了运行时多态的功能。而纯虚函数引入了抽象类、接口的概念。

当基类中的某个函数无法提供一个通用的实现(或者提供默认实现是不合理的),但又希望所有派生类必须实现自己的版本时,就可以使用纯虚函数。这样,基类仅仅定义一个接口,而具体的实现交给派生类。

例如:动物的叫声有很多种,因此无法提供一个通用的默认函数实现。

class Animal {
public:
virtual void speak() = 0; // 纯虚函数,基类不知道如何实现
};
class Dog : public Animal {
public:
void speak() override {
cout << "Woof! Woof!" << endl;
}
};
class Cat : public Animal {
public:
void speak() override {
cout << "Meow! Meow!" << endl;
}
};
int main() {
Dog d;
Cat c;
d.speak(); // 输出:Woof! Woof!
c.speak(); // 输出:Meow! Meow!
return 0;
}

纯虚函数和抽象类:

  1. 存在纯虚函数的类为抽象类,抽象类无法生成实例对象。
  2. 即使派生类继承了抽象类,只要还存在未实现的纯虚函数,派生仍然是抽象类

纯虚函数与虚函数表#

在C++中,纯虚函数(pure virtual function)仍然会在vtable中存储,只不过它在基类的vtable中不会有具体的函数地址,而是一个特殊的占位符(一般是 nullptr 或一个特殊的运行时错误处理函数)。

当派生类实现了纯虚函数后,派生类的vtable就会存储该函数的地址。

13纯虚函数
https://chrisnake11.github.io/blog/posts/coding/c基础/13纯虚函数/
作者
Zheyv
发布于
2025-02-15
许可协议
CC BY-NC-SA 4.0