C ++虚函数问题

时间:2010-02-19 06:42:42

标签: c++ virtual

嘿,如果我有一个Base类和2个派生类......

class Base
{
  virtual void Output()
  {
     cout << "OUTPUTTING A BASE OBJECT" << endl;
  }
};

class Derived : public Base
{
   void Ouput()
   {
     cout << "OUTPUTTING A DERIVED" << endl;
   }
};

class OtherDerived : public Base
{

};

据我了解,如果我尝试从OtherDerived调用Output,它将失败。有没有办法覆盖某些派生版本的Base的输出而不是其他版本的输出?

2 个答案:

答案 0 :(得分:10)

Output类的对象调用OtherDerived失败并不是因为它是虚拟的,而是因为它在private中声明为Base(不是明确地 - 而是private当没有指定其他内容时,是类中的默认值)

Base的声明更改为:

class Base
{
public:
  virtual void Output()
  {
     cout << "OUTPUTTING A BASE OBJECT" << endl;
  }
};

这将有效。 protected也会奏效。由于Output不是纯虚拟,因此可以从不重写它的子类调用它。

答案 1 :(得分:0)

它不会失败 - 它会调用Base :: Output。你想要什么,即。覆盖“对于某些派生类,而不是其他”继承如何工作。你不需要做任何进一步的事情。