C++ 虚函数与纯虚函数:深入理解多态机制
在 C++ 面向对象编程中,多态是核心特性之一,而虚函数与纯虚函数则是实现这一特性的基石。理解它们的本质区别、底层原理以及常见陷阱,对于编写健壮、可扩展的代码至关重要。
一、虚函数的本质与定义
虚函数允许派生类重写基类的行为,并在运行时根据对象的实际类型调用对应的版本。这是动态多态的基础。
1.1 声明语法
虚函数必须在基类中使用 virtual 关键字声明:
class Base {
public:
virtual void func() {
// 默认实现
}
};
1.2 核心特性
- 运行时绑定:调用关系在程序运行期间确定,而非编译时。
- 重写规则:派生类重写的函数必须与基类虚函数的函数名、参数列表完全一致(协变返回类型除外)。
- 继承性:一旦基类声明为虚函数,派生类中的重写函数自动成为虚函数,无需再次添加
virtual关键字(但建议保留以增强可读性)。
1.3 基础示例
下面是一个简单的交通工具示例,展示了基类指针如何指向不同派生类对象并调用对应方法:
#include <iostream>
#include <string>
using namespace std;
// 基类:交通工具
class Vehicle {
public:
virtual void run() {
cout << "交通工具正在行驶" << endl;
}
};
// 派生类:汽车
class Car : public Vehicle {
public:
void run() override {
cout << << endl;
}
};
: Vehicle {
:
{
cout << << endl;
}
};
{
Vehicle* v1 = ();
Vehicle* v2 = ();
v1->();
v2->();
v1;
v2;
;
}


