当派生类定义同名且实现不同的函数时,发生函数重写。规则包括:使用 override 关键字。名称、参数和返回类型与基类函数相同。访问权限不得低于基类函数。通过重写,派生类可以覆盖基类行为,实现多态,动态调用不同派生类的同名方法。

C++ 函数重写:揭开继承中的行为覆盖秘籍
在 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++ 函数重写:揭开继承中的行为覆盖秘籍的详细内容,更多请关注叮当号网其它相关文章!
文章来自互联网,只做分享使用。发布者:城南北边,转转请注明出处:https://www.dingdanghao.com/article/426926.html
