虚函数允许在基类中定义可被派生类重写的成员函数,实现运行时多态;纯虚函数则强制派生类实现特定接口,定义抽象类。1. 虚函数用virtual声明,可有默认实现,支持动态绑定;2. 纯虚函数以=0结尾,无实现,使类成为抽象类,不可实例化;3. 含虚函数的类可实例化,含纯虚函数的类必须由派生类实现才能使用;4. 虚函数提供可选重写,纯虚函数用于接口规范。合理使用可提升程序扩展性与设计清晰度。

虚函数和纯虚函数是C++实现多态的重要机制,主要用于基类中定义接口,让派生类根据需要重写行为。理解它们的区别和使用场景,对设计可扩展的面向对象程序非常关键。
什么是虚函数
虚函数是在基类中用 virtual 关键字声明的成员函数,允许在派生类中被重写(override)。当通过基类指针或引用调用该函数时,程序会根据对象的实际类型动态决定调用哪个版本的函数,这就是动态绑定或运行时多态。
例如:
class Animal {
public:
virtual void speak() {
cout << "Animal speaks" << endl;
}
};
class Dog : public Animal {
public:
void speak() override {
cout << "Woof!" << endl;
}
};
Animal* pet = new Dog();
pet->speak(); // 输出: Woof!
这里即使指针类型是 Animal*,实际调用的是 Dog 的 speak() 函数,因为它是虚函数。
立即学习“C++免费学习笔记(深入)”;
什么是纯虚函数
纯虚函数是一种特殊的虚函数,它在基类中没有实现,只是提供一个接口模板。声明方式是在虚函数后加上 = 0。包含纯虚函数的类称为抽象类,不能实例化对象。
例如:
class Shape {
public:
virtual void draw() = 0; // 纯虚函数
};
class Circle : public Shape {
public:
void draw() override {
cout << "Drawing a circle" << endl;
}
};
Shape 是抽象类,无法创建 Shape 对象,但可以创建 Circle 对象,并通过 Shape 指针调用 draw()。
虚函数与纯虚函数的区别
- 实现要求:虚函数可以在基类中有默认实现,也可以被重写;纯虚函数必须在派生类中实现,否则派生类仍是抽象类。
- 类的实例化:含有虚函数的类可以实例化;含有纯虚函数的类是抽象类,不能实例化。
- 设计目的:虚函数用于提供可选的多态行为;纯虚函数用于强制派生类实现特定接口,适合定义规范。
使用建议
在设计基类时,如果某个函数有通用默认行为,使用虚函数;如果希望派生类必须提供自己的实现,则定义为纯虚函数。合理使用两者可以让代码结构更清晰,易于维护和扩展。
基本上就这些。掌握虚函数和纯虚函数,是写出灵活、可复用C++类体系的基础。











