嘿,如果我有一个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的输出而不是其他版本的输出?
答案 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。你想要什么,即。覆盖“对于某些派生类,而不是其他”是继承如何工作。你不需要做任何进一步的事情。