【发布时间】:2011-06-21 04:26:47
【问题描述】:
使用下面给出的结构定义...
struct A {
virtual void hello() = 0;
};
方法#1:
struct B : public A {
virtual void hello() { ... }
};
方法 #2:
struct B : public A {
void hello() { ... }
};
这两种重写hello函数的方式有什么区别吗?
【问题讨论】:
-
在 C++11 中,您可以编写“void hello() override {}”来明确声明您正在覆盖虚拟方法。如果基本虚拟方法不存在,编译器将失败,并且它具有与将“虚拟”放在后代类上相同的可读性。
-
其实在gcc的C++11中,在派生类中写void hello() override {}是可以的,因为基类已经指定方法hello()是虚的。换句话说,对于 gcc/g++ 来说,在 derived 类中使用 virtual 这个词并不是必须的/强制的。 (我在 RPi 3 上使用 gcc 版本 4.9.2)但无论如何最好在派生类的方法中包含关键字 virtual。
标签: c++ overriding virtual-functions