关于c ++中虚函数的问题

6 c++ polymorphism virtual

我是C++的初学者,这些天我正在研究虚函数.有些问题让我很困惑.

例如:

class A {
  public:
  virtual void f() {
      //do something; 
  }
}

class B: public A {
   public:
   virtual void f() {
//do something;
}
}
Run Code Online (Sandbox Code Playgroud)
  1. class A包含一个虚函数f(),并class B继承它.在里面class B,该函数f()也被声明为虚拟,所以这意味着f()class B重载f()class A?它是否允许继承的类B重载f()?抑或B定义一个新的虚拟功能,该功能从不同f()class A

  2. 虚函数提供了一种重载方法的方法.如果B继承A并且没有声明f()as virtual,那么可以C继承B重载的类f()并实现多态吗?

Naw*_*waz 4

在B类内部,函数f()也被声明为virtual,那么这是否意味着B类中的f()重载A类中的f()

不,它不会超载。它覆盖. 此外,该关键字virtual在 class 中是可选的B。无论您是否编写,B::f()它始终是一个函数。virtualvirtual

当您定义具有相同名称但不同参数的函数时,将使用术语“重载” 。在您的情况下,两个类中的函数签名完全相同,这意味着它没有重载;派生类基本上覆盖了的基类定义。ff()

  • 在不使用“virtual”的情况下,你还能如何“覆盖”一个函数呢? (2认同)
  • 根据 C++03 中的 §10.3p2 的定义,需要 Virtual 来覆盖。 (2认同)