继承:Child使用父虚函数而不是自己的虚函数

Hox*_*bot -1 c++ inheritance virtual-functions

我有继承这个问题,我无法解决这个问题.我有三个班,他们之间有父母关系.它们都具有calcForces()函数.

class Object {
public:
    virtual void calcForces();
};


class Boat : public Object {
public:
    virtual void calcForces();
};


class Sailboat : public Boat {
public:
    void calcForces(Wind wind);
};
Run Code Online (Sandbox Code Playgroud)

现在我的问题是II有一个创建为Sailboat的对象(并将其保存在Object-pointer中),但是当我调用calcForces()时,我最终在Boat :: calcForces()中,而不是Sailboat :: calcForces().我究竟做错了什么?

这是我对函数的调用:

(*this->object_ptr_arr[i]).calcForces();    //'object_ptr_arr' is of type 'Object**'
Run Code Online (Sandbox Code Playgroud)

acr*_*075 11

覆盖的声明必须匹配.您的声明Sailboat::calcForces采用不同的参数(Wind实例),因此不是覆盖.

正如@stefaanv和@skypjack所评论的那样,你可以通过使用override函数说明符来避免这个问题,因为函数说明符会在编译时捕获到错误.