在哪里可以定义虚拟函数

Where can a virtual function be defined?

本文关键字:虚拟 函数 定义 在哪里      更新时间:2023-10-16

我有一个关于C++中虚拟函数的问题,例如,A是基类,B继承AC继承B,我们可以在B中定义一个虚拟函数,并在C中重新定义它吗?我的意思是,这个虚拟函数是否应该在类A中定义,因为A是所有BC的基类(即BC的根)?

不必是。。。B是a的一个特殊对象,很可能B比a有更多的特征。如果C是派生的,那么从B重写一个没有在a中定义的函数是非常正常的。

示例

  • 假设A是一个形式
  • 假设B是一个圆。。。圆具有GetDiameter函数,而窗体没有该函数
  • 假设C是一个椭圆,尽管椭圆没有实际直径,但GetDiameter函数被覆盖以获得两个直径中"最小"的直径

virtual可以在类层次结构中的任何位置使用,但该虚拟函数只能在子类中重写(即它不适用于超类)。

struct A {
  void funcA();
};
struct B : A {
  virtual funcB();
};
struct C : B {
  virtual funcB();
};
//....
  B* b = new C();
  b->funcB(); // calls C's implementation
  A* a = new C();
  a->funcB(); // fails to compile

是的,一点问题都没有-试试:

class A
{
}
class B : public A
{
public: 
 virtual void myFunc(): { std::cout << "B here!"; }
}
class C : public B
{
public: 
 virtual void myFunc(): { std::cout << "No, C here!"; }
}