c++纯虚函数子类的调用规则
时间: 2024-09-14 15:03:12 浏览: 40
详解C++纯虚函数与抽象类
5星 · 资源好评率100%
在C++中,纯虚函数是一种特殊的虚函数,它没有具体的实现,只有声明而没有定义。当你在一个基类中声明一个函数为纯虚函数(`= 0`),表示这个函数需要由派生类提供具体的实现。
子类通过以下规则来调用纯虚函数:
1. **显式调用**:直接通过基类指针或引用调用,会抛出`virtual function call`异常,因为没有实际的函数体可以执行。通常不会这样做,除非明确意图避免运行时动态绑定。
```cpp
class Base {
public:
virtual void pureVirtualFunc() = 0;
};
class Derived : public Base {
public:
// 实现了纯虚函数
void pureVirtualFunc() override { /* ... */ }
};
Base* baseObj = new Derived();
// 这样会触发异常,因为Derived没有默认的构造函数能初始化纯虚函数
baseObj->pureVirtualFunc();
```
2. **隐式调用**:当创建子类的对象并赋值给基类指针或引用时,由于自动初始化,如果子类实现了该纯虚函数,那么实际上会调用子类的版本。这称为**静态绑定**(编译时确定调用哪个函数)。
```cpp
Derived derivedObj; // 自动调用了Derived的纯虚函数实现
Base* basePtr = &derivedObj; // 尽管是基类指针,但在运行时调用的是Derived的函数
basePtr->pureVirtualFunc(); // 正确调用了Derived的实现
```
阅读全文