多态: 函数重载 和 运算符重载属于静态多态,复用函数名动态多态: 派生类和虚函数实现运
时间: 2024-08-13 19:05:50 浏览: 75
详细分析C++ 多态和虚函数
在面向对象编程中,多态性(Polymorphism)是指不同类型的对象能够对同一消息做出不同的响应。它有多种形式,但主要分为两种:静态多态(编译时多态)和动态多态(运行时多态)。
1. **静态多态(函数重载和运算符重载)**[^4]:
- **函数重载**: 在C++等支持多态的语言中,可以为同一个函数名定义多个版本,每个版本有不同的参数列表。例如,有两个不同的加法函数,一个用于两个整数,另一个用于两个浮点数:
```cpp
int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }
```
- **运算符重载**: 通过继承`operator`关键字,可以自定义特定运算符的行为。比如,重载`+`运算符来连接两个字符串:
```cpp
class String {
// ...
friend std::string operator+(const String& str1, const String& str2);
};
```
2. **动态多态(派生类和虚函数实现)**[^5]:
- **派生类**:子类可以继承父类并覆盖或扩展其方法。这是通过在基类声明虚函数(`virtual`)来实现的。当调用一个基类指针指向的虚函数时,实际执行的是子类的版本:
```cpp
class Base {
virtual void display() { cout << "Base" << endl; }
};
class Derived : public Base {
void display() override { cout << "Derived" << endl; }
};
Base* basePtr = new Derived();
basePtr->display(); // 输出 "Derived"
```
- **虚函数**:子类的实例调用虚函数时,会根据实际的对象类型而不是指针类型来确定调用哪个版本的方法。这在运行时实现了多态。
阅读全文