📅  最后修改于: 2023-12-03 15:13:58.295000             🧑  作者: Mango
在 C++ 中,虚函数是一种特殊的成员函数,允许在派生类中通过基类指针或引用调用派生类的特定实现。通过使用虚函数,C++ 提供了一种实现运行时多态的机制,这对于实现面向对象的设计模式非常重要。
当基类中的函数被声明为虚函数时,任何派生类都可以针对该函数提供自己的实现。通过基类的指针或引用,可以根据运行时对象的实际类型来决定调用哪个实现。
在基类中声明虚函数,需要在函数声明前加上关键字 virtual
。例如:
class Base {
public:
virtual void foo() {
// 基类的实现
}
};
在派生类中,可以选择覆盖(重写)虚函数。覆盖时使用 override
关键字可以增加代码的可读性,并帮助在编译时检测错误。
class Derived: public Base {
public:
void foo() override {
// 派生类的实现
}
};
通过使用虚函数,C++ 支持动态绑定,也被称为后期绑定或运行时绑定。这意味着在运行时,实际调用的函数取决于对象的实际类型。
Base* basePtr = new Derived();
basePtr->foo(); // 调用派生类的实现
这里 basePtr
是基类 Base
的指针,但指向的是派生类 Derived
的实例。因为 foo
函数是虚函数,所以会根据实际对象类型来选择调用的实现。
如果类中含有虚函数,通常也需要将析构函数声明为虚函数。这样在删除一个指向派生类对象的基类指针,即使用 delete
操作符时,会正确调用适当的析构函数,而不是只调用基类的析构函数。
class Base {
public:
virtual ~Base() {
// 基类的析构函数
}
};
class Derived: public Base {
public:
~Derived() override {
// 派生类的析构函数
}
};
Base* basePtr = new Derived();
delete basePtr; // 调用派生类的析构函数
通过合理地使用虚函数和多态机制,可以更好地组织和扩展代码,提高代码的可维护性和可复用性。