Множественное наследование Порождённый класс может иметь любое число родительских классов, однако конкретный родительский класс не может быть указан более одного раза в списке наследования порождённого класса. class x: public y,public z Вместе с тем, родительский класс может косвенно появиться в порождённом классе более одного раза. Если порождённый класс два или более раз косвенно наследует родительский класс, то при работе с объектами этого класса могут возникнуть проблемы, связанные с неоднозначностью. +----------------+ +----------------+ +--------------+ +-------------+ | Класс y +------------>| Класс x |<-------+ Класс z |<--+ Класс v | +----------------+ +----------------+ +--------------+ +-------------+ ^---------------------------------------------------------------------------+ class x{ public: int a; x(int a1){a=a1;} void print(){cout<<"\na="<push(mc[i]); for (i=0;i<3;i++) cout<<"\n "<pop(); delete pSt; charStack *pSt2=new charStack(15); .................... } Списки объектов классов +----+ +-----+ |List|>+-----+ +----+ +--.--+ : +---^ v : |(4)+--------+ : | |Объект x| : : +--------+ class x{ protected: char* s; int a,n; public: x(){cout<<"\n введите целое:"; cin<>n; s=new char[n]; cout<<"\n строка:"; cin>>s; } ~x(){delete[] s;} int getA(){return a;} void print(){cout<<"\n.............} }; struct elem{ x *px; elem *next; }; class List{ elem *plist; public: List(){plist=NULL;} ~List(); void add(); void print(); }; v : +-------+ +-------+ +---.---+<----et(2) (3)v +-------+<----x(1) | | +-------+ void list::add(){ elem *et; x *px1; px1=new x();//1 et=new elem;//2 et->px=px1;//3 et->next=plist;//4 plist=et;//5 } void x::print(){ elem *et=pList; while (et!=NULL){ et->px->print(); et=et->next; } } List::~List(){ elem *et=plist; while (et!=NULL){ pList=pList->next; delete et->px; delete et; } }; void main(){ List *pl; pl->add(); pl->add(); pl->print(); ........... delete pl; pl2->add(); pl2->print(); .......... }