C++虚函数问题

Mor*_*gan 0 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
{

};
Run Code Online (Sandbox Code Playgroud)

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

Eli*_*sky 10

调用类的Output对象OtherDerived失败不是因为它是虚拟的,而是因为它是声明privateBase(很明显没有 - 但是private在没有指定其他内容的情况下是类中的默认值)

将声明更改Base为:

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

这将有效.protected也会工作.由于Output它不是纯虚拟的,因此可以从不覆盖它的子类调用它.