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
}
};
在上面的情况下,调用虚拟基类函数(在派生类中重写)会产生错误。
答案 0 :(得分:1)
我能找到的唯一错误就是你从itsel调用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;
}
};
(我在公开测试中直接称它为公开声明)
答案 1 :(得分:0)
如果我理解你是正确的,并且你想打电话给Base::show()
,那么你可以通过以下方式做到:
Derived::Base::show();
或Base::show();
但是如果你只想调用超类的方法,你就会得到正确的代码。