考虑以下代码:
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
,编译器将检查基类,以查看是否存在具有此确切签名的虚函数。如果没有,编译器将抛出错误。