() ( ), . , , . , , - . , , ::, ::. .
. . , .. , :
class X1 {... };class X2 {... };class X3 {... };class Y1: public X1, public X2, public X3 {... };.
. . :
class X {...; f ();... };class Y: public X {... };class Z: public X {... };class D: public Y, public Z {... };D.
. , D , : D::Y::X::f() D::Z::X::f(). D Y::X::f() Z::X::f(), .
, . virtual. , :
class X {... f();... };class Y: virtual public X {... };class Z: virtual public X {... };class D: public Y, public Z {... };D , Y Z.
, . .
, , .
class X {... };class Y: virtual public X {... };class Z: virtual public X {... };class B: virtual public X {... };class C: virtual public X {... };class E: public X {... };class D: public X {... };class A: public D, public B, public Y, public Z, public C, public E {... };: , B, Y, C, Z, D E. , , , .
|
|
. :
class BB {... };class AA: virtual public BB {... };class CC: virtual public BB {... };class DD: public AA, public CC, public virtual BB {... };. - . , . :
class X { public: int d;... };class Y { public: int d;... };class Z: public X, public Y,{ public: int d;... d = X::d + Y::d;...};