当派生类定义同名且实现不同的函数时,发生函数重写。规则包括:使用 override 关键字。名称、参数和返回类型与基类函数相同。访问权限不得低于基类函数。通过重写,派生类可以覆盖基类行为,实现多态,动态调用不同派生类的同名方法。
在 C 中,函数重写是一种通过继承实现多态行为的关键特性。当派生类定义一个与其基类同名且具有不同实现的函数时,就会发生函数重写。
为了重写基类函数,派生类必须使用 override
关键字。例如:
class Base { public: virtual void print() { cout << "Base class print()" << endl; } }; class Derived : public Base { public: virtual void print() override { cout << "Derived class print()" << endl; } };
函数重写的规则如下:
override
关键字。考虑一个形状抽象类和它的两个派生类矩形和圆。
class Shape { public: virtual double getArea() = 0; }; class Rectangle : public Shape { public: double width, height; Rectangle(double w, double h) : width(w), height(h) {} override double getArea() { return width * height; } }; class Circle : public Shape { public: double radius; Circle(double r) : radius(r) {} override double getArea() { return M_PI * radius * radius; } }; int main() { Rectangle rect(5, 3); Circle circle(4); Shape* shapes[] = {&rect, &circle}; for (auto shape : shapes) { cout << "Shape area: " << shape->getArea() << endl; } }
在这个示例中,Shape
类定义了一个抽象方法 getArea()
,由派生类 Rectangle
和 Circle
重写以提供实际的面积计算。通过多态,我们可以使用 shapes
数组中的基类指针调用 getArea()
方法,从而动态地计算和输出不同形状的面积。
以上是C++ 函数重写:揭开继承中的行为覆盖秘籍的详细内容。更多信息请关注PHP中文网其他相关文章!