class Base
{
protected:
virtual void show()
{
// Do some stuff.
}
};
class Derived : public Base
{
protected:
virtual void show()
{
// Do some stuff.
}
};
class Derived_2 : public Derived
{
protected:
virtual void show()
{
this->show(); // error: Base::show() is in accessible
show(); // error: Base::show() is in accessible
Derived::show(); // error: Base::show() is in accessible
}
};
在上述情况下,调用虚拟基类函数(在派生类中被覆盖)会产生错误。
最佳答案
我能找到的唯一错误是您从自身调用 show
导致无限递归并以堆栈溢出错误结束。
但是这段代码编译并运行时甚至没有警告:
class Derived_2 : public Derived
{
public:
virtual void show()
{
//this->show(); // infinite recursion => stack overflow
Base::show(); // ok calls show() from Base
Derived::show(); // ok calls show() from Derived
std::cout << "Derived2" << std::endl;
}
};
(我声明它是公开的,以便在我的测试中直接调用它)
关于c++ - 为什么我不能在派生类重写函数中调用 protected 虚拟基类函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30760228/