函数重写允许子类重新定义基类的同名函数,实现特定于子类的功能:基于名称查找和类型匹配,当子类定义同名函数时,会重写基类函数。这允许子类提供不同的实现,例如示例中 circle 和 rectangle 类重写 shape 类的 area() 函数来计算其特有的面积。
C++ 函数重写:子类专属功能的实现
函数重写是 C++ 中一种重要的机制,它允许子类重新定义基类中同名函数的行为。这对于定义特定于子类的特定功能非常有用。
原理
函数重写基于名称查找和类型匹配规则。当调用一个函数时,编译器会搜索作用域中具有匹配名称的函数。如果找到多个重载函数,则使用最佳匹配原则进行选择。
如果子类定义了与基类同名的函数,则子类中的函数将重写基类中的函数。这允许子类提供与基类不同的实现。
实战案例
考虑一个场景,其中我们有一个 Shape
基类,表示一个通用形状。派生类 Circle
和 Rectangle
分别表示圆形和矩形。我们需要计算这些形状的面积。
基类 Shape
class Shape { public: virtual double area() const = 0; // 纯虚函数 };
派生类 Circle
class Circle : public Shape { public: Circle(double radius) : radius(radius) {} double area() const override { return M_PI * radius * radius; } private: double radius; };
派生类 Rectangle
class Rectangle : public Shape { public: Rectangle(double width, double height) : width(width), height(height) {} double area() const override { return width * height; } private: double width, height; };
使用
我们可以使用这些类来计算不同形状的面积:
int main() { Circle circle(5.0); Rectangle rectangle(3.0, 4.0); std::cout << "Area of circle: " << circle.area() << std::endl; std::cout << "Area of rectangle: " << rectangle.area() << std::endl; return 0; }
输出:
Area of circle: 78.5398 Area of rectangle: 12.0
在这个示例中,Circle
和 Rectangle
类重写了 Shape
类中定义的 area()
函数。这允许我们实现每个形状特有的面积计算逻辑。
以上就是C++ 函数重写实战:实现子类专属功能的妙招的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!