哪里可以定义虚函数?

时间:2014-09-04 14:29:14

标签: c++ inheritance virtual multiple-inheritance

我对C ++中的虚函数有疑问,例如,A是基类,类B继承A,类C继承B 1}},我们可以在B中定义虚拟函数,并在C中重新定义它吗?我的意思是,这个虚函数是否应该在类A中定义,因为A是所有B的基类(即CB的根) {1}}和C

3 个答案:

答案 0 :(得分:4)

不是它不一定是...... B是来自A的专门对象,很可能B具有比A更多的特征。如果导出了C,那么从B中重写一个未在A中定义的函数是很正常的。

实施例

  • 我们假设A是一个表格
  • 假设B是一个圆圈......圆圈有一个GetDiameter函数,表单没有。
  • 假设C是椭圆,虽然椭圆没有实际直径,但是GetDiameter函数被覆盖以获得两个直径中“最小”的直径。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

是的,这根本不是问题 - 试试吧:

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!"; }
}