覆盖C++函数时是否应该再次指定'virtual'?
Should I specify 'virtual' again when I override a C++ function?
当我重写虚函数时:
class Geoff
{
public:
virtual int getArea() { return 0; }
}
当我重写它时,我应该再次指定'virtual'吗?这有什么区别吗?我知道这两种方法似乎都很好,只是想知道是否还有更多的原因。
class George : public Geoff
{
public:
virtual int getArea() { return x*y; }
}
如果你使用c++ 11,你应该使用override
来代替,它既记录你正在重写一个虚函数,又检查一个匹配的虚函数是否存在于一个要重写的基中。
int getArea() override { return x*y; }
在c++ 03中,这是一个风格上的选择-如果你觉得它增加了文档的价值,就把virtual
放在里面。
不,使用覆盖。(http://en.cppreference.com/w/cpp/language/override)
它的优点是,如果方法在父类中不是虚拟的,则会失败。
编辑
正如Mark指出的,如果签名不匹配,它也会失败,而virtual会默默地"成功"。使用引号是因为不匹配的签名会隐藏基类中的遮蔽方法,并生成一个不相关的新虚拟方法。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 在基类中调用的 VIrtual 基函数,C++
- "virtual"对C++析构函数有何影响?
- 不能在没有对象的情况下调用成员函数'virtual void ThreadBase::doTask()'
- 堆栈帧内重复的内联构造函数会导致"pure virtual method called"?
- "Direct" vs "virtual" 对虚函数的调用
- 父类具有Virtual函数.是否需要在父类中具有虚拟析构函数
- 为了模拟对象,我们是否应该声明所有成员函数 virtual(C++)
- 派生类使用或不带 "virtual" 前缀重写基类的虚函数之间有什么区别?
- 视觉 是否可以覆盖子类中的函数C++而无需对抽象的父类中的函数使用 virtual 关键字
- sizeof类,在C++中有int,function,virtual函数
- 从constexpr函数返回一个类需要使用g++的virtual关键字
- 抽象类:成员函数virtual..的抽象返回类型无效
- 覆盖C++函数时是否应该再次指定'virtual'?
- 使用 "static virtual" 函数的元对象
- 什么是从虚拟基类继承的虚函数的"virtual thunk"?
- 使用关键字和不带关键字覆盖函数"virtual"
- 这个头函数(virtual const char* What () const throw())的含义是什么?