- •8. Множественное наследование
- •Добавляем сериализацию...
- •Множественное наследование
- •Множественное наследование
- •Пример
- •Возможная реализация
- •Возможная реализация
- •"Ромбовидное" наследование
- •Пример
- •Пример
- •Пример
- •Виртуальное наследование
- •Улучшенный пример
- •Улучшенный пример
- •Улучшенный пример
Множественное наследование
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*/}
Проблемымножественного наследования
Несмотря на мощь и гибкость множественное наследование является потенциальным источником следующих проблем:
несовместимость (перекрытие методов) базовыхклассов между собой;
"ромбовидное наследование" - когда родительские классы порождаемого имеют всвоих иерархиях общий базовый класс.
Засчет этого во многих современных языках ООПмножественное наследование запрещено или ограничено.