Dre*_*kes 2 c++ inheritance overriding virtual-functions c++11
考虑C++ 11中的以下类:
class Base
{
public:
virtual void foo() = 0;
}
class Sub1 : public Base
{
public:
virtual void foo() override {};
}
class Sub2 : public Base
{
public:
void foo() override {};
}
Run Code Online (Sandbox Code Playgroud)
使被覆盖的函数非虚拟化的后果是什么Sub2?
T.C*_*.C. 11
无论是否声明,虚函数的覆盖始终是虚拟的.因此,就语言而言,virtual在声明中具有或不具有关键字Sub2::foo()对于语言无关,因为override关键字意味着该函数必须覆盖基类的成员函数.从标准的§10.3[class.virtual]/p2开始,重点补充:
如果
vf在类Base和类中声明虚拟成员函数Derived,直接或间接地从具有相同名称Base的成员函数派生vf,参数类型列表(8.3.5),cv-qualification和ref-qualifier(或如果没有Base::vf声明,那么Derived::vf它也是虚拟的(无论是否如此声明)并且它会覆盖Base::vf.为方便起见,我们说任何虚函数都会覆盖自身.
省略这个词virtual并不会使这个功能成为非虚拟的.它确实减少了冗长度,视觉噪声的数量,或者简而言之,源代码文本可以让人觉得只是过于啰嗦而没有任何特定部分引入任何可以引起读者注意的新内容的方式所以这一切看起来或多或少像一团灰色的文字,这当然会导致一些重要的细节被忽视,也就是说,无意中被忽略了.该override关键字是优选的.
| 归档时间: |
|
| 查看次数: |
518 次 |
| 最近记录: |