C++ 函数重载的多态性机制
简介
多态性是面向对象编程中一项基本特性,它允许使用一个类的对象调用不同版本的函数,具体取决于对象的实际类型。C++ 中函数重载通过同一个函数名称调用不同实现的函数,提供了多种多态性实现方式。
函数重载的语法
函数重载允许在同作用域内定义多个具有相同名称但参数不同的函数。例如:
立即学习“C++免费学习笔记(深入)”;
int sum(int a, int b);
double sum(double a, double b);
这两个函数都称为 sum,但它们接受不同类型的参数,分别是整数和双精度浮点数。
编译时的多态性
函数重载提供编译时的多态性,这意味着编译器在编译时根据参数类型选择要调用的函数。当调用 sum 函数时,编译器根据给定参数的类型确定调用哪个函数实现。
实战案例:计算面积
考虑一个需要计算不同形状面积的程序。我们可以使用函数重载来创建具有相同名称的 area 函数,该函数根据形状的实际类型接受不同的参数。
#include <iostream>
using namespace std;
class Shape {
public:
virtual double area() = 0; // 纯虚函数
};
class Rectangle : public Shape {
public:
double length, width;
Rectangle(double length, double width) : length(length), width(width) {}
double area() override {
return length * width;
}
};
class Circle : public Shape {
public:
double radius;
Circle(double radius) : radius(radius) {}
double area() override {
return 3.14159 * radius * radius;
}
};
int main() {
Shape* shapes[] = { new Rectangle(4, 5), new Circle(3) };
for (auto& shape : shapes) {
cout << "Area: " << shape->area() << endl;
}
return 0;
}
运行输出
Area: 20
Area: 28.2743
在这个例子中,area 函数根据所处理的形状实例动态选择合适的实现,提供了多态性的好处。