#include class A { int A1; public: A(int n1=0); void DefineA1(int); int DameA1(void); }; A::A(int n1) { A1=n1; } void A::DefineA1(int n) { A1=n; } int A::DameA1(void) { return A1; } // Herencia Repetida simple class B : public A class C : public A { int B1; { int C1; public: public: B(int na=0, int nb=0); C(int na=0, int nc=0); void DefineB1(int); void DefineC1(int); int DameB1(void); int DameC1(void); }; }; B::B(int na, int nb) : A(na) C::C(int na, int nc) : A(na) { B1=nb; { C1=nc; } } void B::DefineB1(int n) void C::DefineC1(int n) { B1=n; } { C1=n; } int B::DameB1(void) int C::DameC1(void) { return B1; } { return C1; } class D : public B, public C { int D1; public: D(int na=0, int nb=0, int nc=0, int nd=0); void DefineD1(int); int DameD1(void); }; D::D(int na, int nb, int nc, int nd) : B(na, nb), C(na+1,nc) { D1=nd; } void D::DefineD1(int n) { D1=n; } int D::DameD1(void) { return D1; } // Herencia Repetida con clases virtuales class Bv : public virtual A class Cv : public virtual A { int Bv1; { int Cv1; public: public: Bv(int na=0, int nb=0); Cv(int na=0, int nc=0); void DefineBv1(int); void DefineCv1(int); int DameBv1(void); int DameCv1(void); }; }; Bv::Bv(int na, int nb) : A(na) Cv::Cv(int na, int nc) : A(na) { Bv1=nb; { Cv1=nc; } } void Bv::DefineBv1(int n) void Cv::DefineCv1(int n) { Bv1=n; } { Cv1=n; } int Bv::DameBv1(void) int Cv::DameCv1(void) { return Bv1; } { return Cv1; } class Dv : public Bv, public Cv { int Dv1; public: Dv(int na=0, int nb=0, int nc=0, int nd=0); void DefineDv1(int); int DameDv1(void); }; Dv::Dv(int na, int nb, int nc, int nd) : Bv(na, nb), Cv(na+1,nc) { Dv1=nd; } void Dv::DefineDv1(int n) { Dv1=n; } int Dv::DameDv1(void) { return Dv1; } void main (void) { D ObjD(1,2,3,4); cout << "Datos del Objeto D - Herencia repetida simple" << endl; cout << "D = " << ObjD.DameD1() << endl; cout << "C = " << ObjD.DameC1() << endl; cout << "B = " << ObjD.DameB1() << endl; cout << "A-C = " << ObjD.C::DameA1() << endl; cout << "A-B = " << ObjD.B::DameA1() << endl; cout << endl <