考虑以下代码:

struct virtualfoo
{
    virtualfoo{};
    virtual ~virtualfoo{};

    virtual double doStuff() = 0
};


struct realbar :  virtualfoo
{
     realbar{};
     virtual ~realbar{};

     virtual double doStuff();
};

由于我想为doStuff()实现realbar,因此虚拟不是强制性的。但是,如果我做对了,将虚拟说明符放在realbar::doStuff()旁边不会有什么坏处吗?
使用/不使用虚拟可以产生什么副作用?

最佳答案

在派生类中,不需要virtual关键字。但是,它使代码更清晰。同样在C++ 11中引入了override关键字,该关键字允许源代码清楚地指定成员函数旨在覆盖基类方法。

使用关键字override,编译器将检查基类,以查看是否存在具有此确切签名的虚函数。如果没有,编译器将抛出错误。

10-08 11:57