请考虑以下事项:
班级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
并不重要,这原则上是我无法避免的实施细节。
因此,原则上我希望Foo
从B
公开继承,但私下来自Foo
。
C ++中是否有一些构造允许我这样做?
我必须补充一点,虚拟继承不是一个选项,因为在我的情况下,A
派生自B
(见Is it safe to use *virtual* multiple inheritance if QObject is being derived from DIRECTLY?)。
(注意:感兴趣的人:就我而言,A
为QObject
且A
为QWindow
)
答案 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
};