C++ 子类的子类重写其虚函数
时间: 2024-10-11 18:10:52 浏览: 21
在C++中,子类可以继续重写其父类的虚函数。当一个基类声明了一个虚函数,那么它的所有派生类都会自动获得这个虚函数的重写能力。如果一个子类再继承另一个基类,并且那个基类也包含一个同名的虚函数,那么这个新继承来的子类可以在自己的内部再次重写该函数,这就是所谓的“深层次的重写”。
这种机制使得每个具体的子类都可以提供他们自己的版本实现,即使是在它们的祖先类链上。当你通过基类指针或引用调用这个虚函数时,会根据实际的对象类型而不是指针的类型去调用相应的函数,这就是动态绑定或称为晚绑定。
举个例子:
```cpp
class Base {
public:
virtual void virtualFunction() { cout << "Base::virtualFunction()" << endl; }
};
class Derived1 : public Base {
public:
void virtualFunction() override { cout << "Derived1::virtualFunction()" << endl; }
};
class Derived2 : public Derived1 {
public:
// 再次重写 Base 中的虚函数
void virtualFunction() override { cout << "Derived2::virtualFunction()" << endl; }
};
int main() {
Base* basePtr = new Derived2(); // 看起来是 Base 指针,但实际上是 Derived2 对象
basePtr->virtualFunction(); // 输出 "Derived2::virtualFunction()"
delete basePtr;
return 0;
}
```
阅读全文