【问题标题】:in c++ when subclassing why sometimes need to add virtual keyword to overridden function?在 C++ 中子类化时,为什么有时需要将 virtual 关键字添加到被覆盖的函数?
【发布时间】:2011-07-15 15:06:59
【问题描述】:

为什么有时在 C++ 示例中看到子类化/继承时,基类有 virtual 关键字,有时被覆盖的函数也有 virtual 关键字,为什么有时需要在子类中添加 virtual 关键字? 例如:

class Base 
{
  Base(){};
  virtual void f()
     ......
  }
};

class Sub : public Base
{
  Sub(){};
  virtual void f()
     ...new impl of f() ...
  }
};

【问题讨论】:

标签: c++ inheritance virtual-functions


【解决方案1】:

这不是必需的,但如果您只看到派生类定义,它有助于提高可读性。

§10.3 [class.virtual]/3

如果在Base类和Derived类中声明了一个虚成员函数vf,直接或间接从Base派生,则声明一个与Base::vf同名同参数列表的成员函数vf,则Derived ::vf 也是虚拟的(无论是否如此声明)并且它覆盖 97) Base::vf.

其中脚注97) 基本上说明如果参数列表不同,该函数将不会覆盖也不一定是virtual

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多