1. 多态的本质与实现原理
在面向对象编程中,多态性是最核心的三大特性之一(封装、继承、多态)。它允许我们通过基类的指针或引用来操作派生类对象,实现"一个接口,多种实现"的效果。这种机制极大地提高了代码的灵活性和可扩展性。
多态的实现依赖于两个关键技术:
- 虚函数(Virtual Function):通过在基类中声明虚函数,派生类可以重写这些函数
- 动态绑定(Dynamic Binding):在运行时根据对象的实际类型调用对应的函数版本
注意:只有通过基类指针或引用调用虚函数时才会发生动态绑定,如果直接通过对象调用,则仍然是静态绑定。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 完整示例代码解析
2.1 基类与派生类定义
cpp复制#include <iostream>
using namespace std;
// 基类
class Animal {
public:
virtual void makeSound() { // 虚函数声明
cout << "Some animal sound" << endl;
}
virtual ~Animal() {} // 虚析构函数
};
// 派生类1
class Dog : public Animal {
public:
void makeSound() override { // 重写虚函数
cout << "Woof! Woof!" << endl;
}
};
// 派生类2
class Cat : public Animal {
public:
void makeSound() override {
cout << "Meow~" << endl;
}
};
关键点说明:
virtual关键字用于声明虚函数override关键字(C++11引入)明确表示要重写基类虚函数- 基类中声明虚析构函数是良好实践,确保通过基类指针删除派生类对象时能正确调用派生类的析构函数
2.2 多态调用演示
cpp复制void animalSound(Animal* animal) {
animal->makeSound(); // 多态调用
}
