北京响应式网站建设费用,财务公司管理办法,外贸网站设计案例,wordpress模板文件编辑插件override关键字
用于显式标识一个成员函数#xff08;通常是虚函数#xff09;是在派生类中重写#xff08;覆盖#xff09;了基类中的虚函数。这有助于提高代码的可读性#xff0c;同时在编译时提供了检查#xff0c;确保派生类中的函数确实是在基类中有对应的虚函数。…override关键字
用于显式标识一个成员函数通常是虚函数是在派生类中重写覆盖了基类中的虚函数。这有助于提高代码的可读性同时在编译时提供了检查确保派生类中的函数确实是在基类中有对应的虚函数。
当在基类和派生类中使用函数重载(override)时通过虚函数机制可以实现运行时多态性。
class Shape {
public:virtual void draw() {std::cout Drawing a shape. std::endl;}
};class Circle : public Shape {
public:void draw() override {std::cout Drawing a circle. std::endl;}
};class Square : public Shape {
public:void draw() override {std::cout Drawing a square. std::endl;}
};int main() {// 使用基类指针实现多态Shape* shapePtr;Circle circle;Square square;// 指针指向 Circle 对象调用 Circle::draw()shapePtr circle;shapePtr-draw();// 指针指向 Square 对象调用 Square::draw()shapePtr square;shapePtr-draw();// 使用基类引用实现多态Shape shapeRef circle;shapeRef.draw(); // 调用 Circle::draw()shapeRef square;shapeRef.draw(); // 调用 Square::draw()// 使用容器存储不同类型的对象实现多态std::vectorShape* shapes;shapes.push_back(new Circle());shapes.push_back(new Square());for (Shape* shape : shapes) {shape-draw();}// 注意需要手动释放通过 new 创建的对象for (Shape* shape : shapes) {delete shape;}return 0;
} C98中一旦在基类A中的成员函数fun被声明为virtual对于派生类B而言fun总是能被重载。
在java中可以使用final关键字使派生类不可以覆盖它修饰的虚函数。C11也采用类似的做法。 final通常用在继承关系中中途终止派生类的重载。从接口派生的角度而言final可以在派生过程中任意阻止一个接口的可重载性。