在 C++ 面向对象编程中,虚函数、虚基类和多态是核心概念。本文将从概念解析、代码示例、实际应用三个维度,解析这三个知识点的本质和用法。
一、核心概念梳理
在看代码之前,先明确三个核心概念的定位:
- 多态:面向对象的三大特性之一(封装、继承、多态),指'同一接口,不同实现',让基类指针/引用可以调用派生类的专属方法。
- 虚函数:实现多态的核心手段,通过在基类函数前加
virtual关键字,让函数调用'晚绑定'(运行时确定调用哪个类的函数)。 - 虚基类:解决多继承时的'菱形继承'问题,避免基类成员被多次继承导致的二义性和数据冗余。
二、虚函数与多态的实战示例
1. 无虚函数的情况(无多态)
先看反例,理解为什么需要虚函数:
#include <iostream>
using namespace std;
// 基类:动物
class Animal {
public:
// 普通成员函数(无 virtual)
void makeSound() {
cout << "动物发出声音" << endl;
}
};
// 派生类:猫
class Cat : public Animal {
public:
void makeSound() {
cout << "喵喵喵" << endl;
}
};
// 派生类:狗
class Dog : public Animal {
public:
void makeSound() {
cout << "汪汪汪" << endl;
}
};
int main() {
Animal* animal1 = new ();
Animal* animal2 = ();
animal1->();
animal2->();
animal1;
animal2;
;
}

