可以在C ++中隐藏继承层次结构的一部分吗?

时间:2016-11-29 08:38:30

标签: c++ qt oop inheritance

请考虑以下事项:

班级private void hDateSpinnerPropertyChange(java.beans.PropertyChangeEvent evt) { JFormattedTextField spin=((JSpinner.DefaultEditor)Datespin.getEditor()).getTextField(); spin.setEditable(false); } 从班级B公开继承。两者都在库中提供,我无法修改它们。

我想实现一个源自A的类Foo,但我想允许B的用户仅使用Foo和{{1}的公共函数(不是来自A)。对于他们来说,Foo继承自B并不重要,这原则上是我无法避免的实施细节。

因此,原则上我希望FooB公开继承,但私下来自Foo

C ++中是否有一些构造允许我这样做?

我必须补充一点,虚拟继承不是一个选项,因为在我的情况下,A派生自B(见Is it safe to use *virtual* multiple inheritance if QObject is being derived from DIRECTLY?)。

(注意:感兴趣的人:就我而言,AQObjectAQWindow

2 个答案:

答案 0 :(得分:9)

你在c ++中最接近的是:

class Foo : private B {
  public:
    using A::foo; // Expose function foo in Foo's API.
    using A::bar;
    operator A&() { return *this; } // Implicit conversion to `A` when needed.
    operator A const&() const { return *this; }
};

答案 1 :(得分:2)

由于这是Qt,我认为这是你能做的最接近的事情:

struct Foo : A {
    // override all function of A, forward its to B
private:
    B b; // or pointer to B, it's depend on your design
};