C 中的多态性:函数重载允许具有相同名称但不同参数列表的多个函数,根据调用时的参数类型选择执行的函数。函数重写允许派生类重新定义基类中已存在的方法,从而实现不同类型的行为,具体取决于对象的类型。
C 函数重载和重写中多态性的体现
多态性是面向对象编程的关键概念之一。它允许不同类型(派生类)的对象对相同的函数调用做出不同的响应。C 通过函数重载(overloading)和重写(overriding)实现了多态性。
函数重载
函数重载是指具有相同名称但不同参数列表的多个函数。编译器将根据实际调用时的参数类型来选择正确的函数。例如,以下代码重载了 area()
函数,它可以计算圆或矩形的面积:
class Circle { public: double area(double radius) { return 3.14159 * radius * radius; } }; class Rectangle { public: double area(double length, double width) { return length * width; } };
重写
重写是指派生类中重新定义基类中已存在的方法。它允许派生类提供自己的实现,从而实现不同类型的行为。例如,以下代码在派生类 Square
中重写了基类 Rectangle
的 area()
方法来计算正方形的面积:
class Rectangle { public: virtual double area(double length, double width) { return length * width; } }; class Square : public Rectangle { public: virtual double area(double side) override { return side * side; } };
实战案例
考虑一个图形库,其中有 Shape
基类和 Circle
、Rectangle
和 Square
派生类。我们想创建一个函数 draw()
来绘制不同的图形。通过使用重载,我们可以提供不同的 draw()
方法来处理每种形状类型:
struct IShape { virtual void draw() = 0; }; struct Circle : public IShape { void draw() override { // 代码绘制圆 } }; struct Rectangle : public IShape { void draw() override { // 代码绘制矩形 } }; struct Square : public Rectangle { void draw() override { // 代码绘制正方形 } };
在调用 draw()
方法时,C 将根据实际对象的类型选择正确的函数版本。这使我们可以编写通用代码来处理不同类型的图形,而无需显式转换或强制转换。
以上是C++ 函数重载和重写中多态性的体现的详细内容。更多信息请关注PHP中文网其他相关文章!