为什么我不能在派生类重写函数中调用受保护的虚拟基类函数?
Why can't I call protected virtual base class function in the derived class overridden function?
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;
}
};
(我将其声明为public以便在测试中直接调用)
如果我理解正确,你想调用Base::show()
,那么你可以这样做:
Derived::Base::show();
或仅Base::show();
但是如果你只是想调用超类的方法,你有一个正确的代码
相关文章:
- 在 lambda 函数 g++-4.8 中调用继承的受保护子类型
- std::异步不能调用受保护的基类方法
- 从嵌套结构调用受保护的基类函数
- C#调用C++dll试图读取或写入受保护的内存
- 尝试在 C++ 中的子类中调用父类的受保护函数
- Lua errorPANIC:调用 Lua API 时出现不受保护的错误(尝试调用 nil 值)
- 通过此指针调用受保护的基类方法,该指针投射到派生类(C++)中的基类
- C++:重写由另一个方法调用的受保护方法
- 从基类的静态模板方法中调用继承类的受保护 ctor 失败
- 在C++中为成员对象调用受保护的方法
- 受保护部分:没有匹配函数可调用
- 通过 DllImport 在 C# 中调用 C 方法 - 尝试读取或写入受保护的内存
- 在C++中调用受保护的虚拟方法
- 调用基类的受保护函数时出错
- P/在 /MT 或 /MD 上调用"受保护的内存"异常
- 无法调用继承的受保护泛型类成员
- 为什么允许在派生类中调用受保护的静态方法
- 为什么派生类不能在此代码中调用受保护的成员函数?
- 如何在仅具有受保护或私有构造函数的类上调用 ::std::make_shared
- 为什么 clang 不允许派生类调用受保护的基函数?