函数重载允许一个类中具有同名但签名不同的函数,而函数重写发生在派生类中,当它覆盖基类中具有相同签名的函数,提供不同的行为。
C 中函数重载与重写的区别
函数重载
函数重载允许在同一类中使用相同名称的不同函数,只要它们的签名(参数类型和数量)不同。
语法:
return_type function_name(parameter_types) { // 函数体 } // 另一个重载 return_type function_name(other_parameter_types) { // 另一个函数体 }
实战案例:
考虑一个名为 AreaCalculator
的类,它计算不同形状的面积:
class AreaCalculator { public: double Area(double radius) { return M_PI * radius * radius; } double Area(double length, double width) { return length * width; } double Area(int numOfSides, double sideLength) { // 正多边形的面积公式 // ... 省略后面代码 } };
在这里,Area
函数被重载以接收不同数量和类型的参数,允许根据形状类型计算不同的面积。
函数重写
函数重写发生在派生类中,当它覆盖基类中具有相同签名(名称和参数类型)的函数时。派生类中的重写函数的行为通常不同于基类中的函数。
语法:
class DerivedClass : public BaseClass { public: // 重写基类中的函数 return_type function_name(parameter_types) { // 重写的函数体 } };
实战案例:
考虑一个名为 Shape
的基类,它定义了一个 Draw
函数来绘制形状:
class Shape { public: virtual void Draw() { // 绘制通用形状 // ... 省略后面代码 } };
派生类 Circle
可以重写 Draw
函数来专门绘制圆形:
class Circle : public Shape { public: void Draw() override { // 绘制圆形 // ... 省略后面代码 } };
通过重写,Circle
类的 Draw
函数将覆盖 Shape
类中的 Draw
函数,并提供更具体的绘制实现。
以上是如何区分 C++ 中函数重载和重写的详细内容。更多信息请关注PHP中文网其他相关文章!