在子类中重写时如何调用私有虚拟基类实现

问题描述 投票:0回答:1

我具有这样的类层次结构:

class Base
{
public:
  void start() { init(); }
private:
  virtual void init() = 0;
};

class Default : public Base
{
private:
  virtual void init() override {/*default implementation*/};
};

class Special : public Default
{
private:
  virtual void init() override final {/*specialized implementation*/};
}

如果我在类型为start()的对象上调用Special,这可以正常工作;

现在我有一种情况,在Special类的实现中,我想调用Default类的实现。通常,此选项适用于Default::init();,但由于Default的声明为private而在此处失败。

显然,一种解决方案是将其从private更改为protected,但我想问一下是否还有另一种方法?我不想允许任何孩子直接调用此函数,而是将其限制为通过BaseDefault类中已经定义的虚函数启动的调用。

是否有一些选项或修饰符允许成员函数调用仅在子类位于(相同)重写虚拟成员函数之内时才允许子类进行?

我有一个这样的类层次结构:class Base {public:void start(){init(); } private:虚拟void init()= 0; }; class默认:public Base {private:虚拟void init()覆盖{/ * ...

c++ inheritance virtual
1个回答
0
投票

C ++没有提供直接实现此目的的方法,因此您必须解决,例如G。在下面的代码中。好吧,如果您绝对想要

© www.soinside.com 2019 - 2024. All rights reserved.