假设类 Y
公开继承了类 X
。类 Z
是否可以在公开继承 X
的同时私有(private)继承 Y
?
为了更清楚地说明这一点,假设 X
定义了公共(public)方法 x1
和 x2
。 Y
继承X
,覆盖x1
并提供方法y
。 C++ 是否允许第三个类 Z
以 Y
的 x1
实现的方式继承 Y
和 y
是私有(private)的,而外界只看到它公开继承了 X
,即只有一个公共(public)方法 x2
?
最佳答案
是的,这叫做虚拟继承。
struct X {
virtual void x1();
void x2();
};
struct Y : virtual X {
void x1(); // overrides
void y();
};
struct Z : private Y, virtual X {
};
人们不能执行 z.y()
或 z.x1()
但他们可以执行 z.x2()
并且可以将 code>Z*
到 X*
。然而,一旦他们这样做,他们当然可以调用 converted->x1()
和 converted->x2()
。
你没有说任何关于你的目标,但听起来你真的想保留 Y
作为指针
struct X {
virtual void x1();
void x2();
};
struct Y : X {
virtual void x1(); // overrides
void y();
};
struct Z : X {
virtual void x1() { // overrides
/* uses y->x1 */
}
Y *y;
};
这对我来说看起来更熟悉。
关于c++ - C++中同时的私有(private)和公共(public)继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4546340/