Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lect08.pdf
Скачиваний:
7
Добавлен:
06.02.2016
Размер:
396.45 Кб
Скачать

Множественное наследование

ClassA ClassB

ClassC

class C : public A, public B { };/*Class code here*/

Пример

 

Shape

 

 

+Draw()

 

 

Round

Rectangle

Fillable

Annotateable

Serializeable

 

 

 

+Fill()

+GetText() : char*

+Serialize(в fileName : const char*)

+SetText(в text : const char*)

 

Circle

RectBox

 

Возможная реализация

class Shape { public:

};virtual void Draw()=0;

class Round { int x,y,r;

public:

};void Draw(){/*Implement here*/}

class Fillable { public:

};virtual void Fill()=0;

Возможная реализация

class Annotateable { char text[50];

public:

const char * GetText() {return text;} void SetText(const char* text) {

};strcpy(this->text, text);}

class Circle: public Round, public Annotateable, public Fillable {

public:

};void Fill() {/*Implement here*/}

Проблемымножественного наследования

Несмотря на мощь и гибкость множественное наследование является потенциальным источником следующих проблем:

несовместимость (перекрытие методов) базовыхклассов между собой;

"ромбовидное наследование" - когда родительские классы порождаемого имеют всвоих иерархиях общий базовый класс.

Засчет этого во многих современных языках ООПмножественное наследование запрещено или ограничено.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]