Ent*_*ian 55 c++ overriding virtual-destructor c++11
虚拟析构函数声明后的覆盖标识符是否有任何特殊含义?
class Base
{
public:
virtual ~Base()
{}
virtual int Method() const
{}
};
class Derived : public Base
{
public:
virtual ~Derived() override
{}
virtual int Method() override // error: marked override, but does not override - missing const
{}
};
Run Code Online (Sandbox Code Playgroud)
在虚方法上使用覆盖标识符作为检查非常有用:当Base虚方法实际上未被覆盖时,编译器将报告错误.
虚拟析构函数上的覆盖是否也有任何含义/功能?
Man*_*rse 43
是.如果基础析构函数不是虚拟的,则override标记将导致程序无法编译:
class Base
{
public:
~Base()
{}
};
class Derived : public Base
{
public:
virtual ~Derived() override //error: '~Derived' marked 'override' but does
// not override any member functions
{}
};
Run Code Online (Sandbox Code Playgroud)
Joh*_*ing 41
它不override具有特殊含义,而是析构函数本身:
6 /尽管析构函数不是继承的,派生类中的析构函数会覆盖声明为virtual的基类析构函数; 见12.4和12.5.
如果将此与前一条款一起使用:
5 /如果使用virt-specifier override标记虚函数并且不覆盖基类的成员函数,则程序格式错误.[例如:
Run Code Online (Sandbox Code Playgroud)struct B { virtual void f(int); }; struct D : B { void f(long) override; // error: wrong signature overriding B::f void f(int) override; // OK };- 末端的例子]
你可以看到,如果一个析构函数被标记override但是基类没有virtual析构函数,那么该程序就是格式错误的.
| 归档时间: |
|
| 查看次数: |
31584 次 |
| 最近记录: |