C++ 多态:面向对象动态行为的核心机制
多态是 C++ 面向对象编程的三大特性之一,简单来说就是'一个接口,多种实现'。它允许同一行为在不同对象上表现出不同的形态,是构建灵活、可扩展系统的关键。
一、多态的概念与分类
多态主要分为两大类,它们的触发时机和实现原理截然不同:
- 静态多态:在编译阶段确定调用关系,也称为编译时多态。主要通过函数重载和运算符重载实现。
- 动态多态:在运行阶段确定调用关系,也称为运行时多态。核心依赖于虚函数以及基类指针或引用指向派生类对象。
举个生活中的例子:同样是'动物叫'这个行为,猫会发出'喵喵'声,狗会发出'汪汪'声,这就是不同对象对同一接口的不同实现。
二、静态多态:编译时确定的多态性
静态多态的调用关系在编译阶段就已经由编译器根据参数列表的差异匹配好了。
2.1 函数重载实现静态多态
这是最常见的形式,在同一作用域内定义同名函数,通过参数的类型或数量来区分。
#include <iostream>
using namespace std;
// 静态多态:函数重载
void print(int a) {
cout << "整数:" << a << endl;
}
void print(double b) {
cout << "浮点数:" << b << endl;
}
void print(string c) {
cout << "字符串:" << c << endl;
}
int main() {
// 编译阶段确定调用哪个 print 函数
print(10);
print(3.14);
print("C++ Static Polymorphism");
return 0;
}
2.2 运算符重载实现静态多态
通过重载运算符,让自定义类型支持内置运算符的操作,本质上也是编译时多态。
std;
{
:
x, y;
( x = , y = ) : (x), (y) {}
Point +( Point& p) {
(->x + p.x, ->y + p.y);
}
};
{
;
Point p3 = p1 + p2;
cout << << px << << py << endl;
;
}


