Объектно-ориентированное программирование на языке С++. Лясин Д.Н - 62 стр.

UptoLike

Составители: 

62
Дублирование косвенного базового класса приводит к включению в
производный класс нескольких объектов базового класса. Для класса С в
последнем примере это означает, что компонентное данное x будет существовать
в объектах данного класса в двух экземпляраходин унаследован через класс В,
другойчерез класс D. Структура объекта класса С изображена на рис
. 9.
объект класса А, унаследованный через класс В
int x
объект класса В
объект класса А, унаследованный через класс D
int x
объект класса D
объект класса С
Рисунок 9. - Структура производного класса при множественном
наследовании с дублированием косвенного базового класса.
При множественном наследовании зачастую возникает проблема
неоднозначности при доступе к дублирующимся компонентам класса: неясно,
какой из одноименных компонент изменится при следующем обращении
main()
{ C c;
c.x=6; // Ошибка!!!
А
В
С
Рисунок 8. - Множественное наследование с дублированием косвенного базового
класса
D
А
      А                       А

            В             D

                   С
 Рисунок 8. - Множественное наследование с дублированием косвенного базового
                                   класса

      Дублирование косвенного базового класса приводит к включению в
производный класс нескольких объектов базового класса. Для класса С в
последнем примере это означает, что компонентное данное x будет существовать
в объектах данного класса в двух экземплярах – один унаследован через класс В,
другой – через класс D. Структура объекта класса С изображена на рис. 9.




       объект класса А, унаследованный через класс В
       int x
       объект класса В
       объект класса А, унаследованный через класс D
       int x
       объект класса D
       объект класса С
     Рисунок 9. - Структура производного класса при множественном
наследовании с дублированием косвенного базового класса.


      При    множественном     наследовании    зачастую    возникает   проблема
неоднозначности при доступе к дублирующимся компонентам класса: неясно,
какой из одноименных компонент изменится при следующем обращении
      main()
      { C c;
        c.x=6; // Ошибка!!!

                                       62