АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Проблема повторяющихся базовых классов

Читайте также:
  1. Абсолютная и относительная ограниченность ресурсов и проблема выбора. Кривая производственных возможностей
  2. Алегоричний епос. Поява дидактич-алегорич.поеми «Роман про троянду». Проблема авторства.
  3. Алкоголизм и наркомания как медико-социальная проблема
  4. Багатозначність слова і проблема порушення норм слововживання
  5. Билингвизм как междисциплинарная проблема.
  6. Бюджет держави та проблема його балансування.
  7. В ходе производства очной ставки возникают многочисленные проблемы. Существует проблема принятия решения о целесообразности проведения очной ставки и выбор момента ее проведения.
  8. В чому полягає проблема етичного співвідношення ідеального і реального(крізь призму поділу на належне і суще)?Чому небезпечний абсолютизований ідеалізм і які його наслідки?
  9. В-9 Формы возникновения государств: восточные раннеклассовые гос-ва и западные рабовладельческие гос-ва?
  10. Влияние денежного сектора на реальную экономику. Проблема нейтральности денег.
  11. Внезапность как один из базовых принципов черкесского военного искусства (XVIII – XIX вв.)
  12. Вопрос 22. Сельскохозяйственные ресурсы и продовольственная проблема в мировой экономике.

 

Классы TStringList и TTextReader в нашем примере могут иметь одинаковый базовый класс, например TObject. В этом случае объект класса TDelimitedReader имеет две копии полей класса TObject. Из-за дублирования полей возникает неоднозначность при обращении к полю класса TObject из метода класса TDelimitedReader. Проблема решается с помощью уточненного имени:

 

TTextReader::m_Field;

TStringList::m_Field;

 

Однако главная проблема состоит в том, что одна сущность дублируется внутри базового класса. На практике это обычно не требуется.

 

 

Такой результат достигается при применении виртуальных базовых классов:

 

class TDelimitedReader: public TTextReader, public TStringList

{

...

};

class TTextReader: public TObject

{

...

};

 

class TStringList: virtual public TObject

{

...

};

 

Обычное наследование соответствует агрегации всех полей базового класса. Виртуальное наследование соответствует агрегации ссылки на поля базового класса.

 

 

Если же при объявлении класса TTextReader мы запишем следующее:

 

class TTextReader: virtual public TObject

{

...

};

то структура полей будет такой:

Таким образом, множественное наследование таит следующую проблему: заранее неизвестно от каких классов программист захочет унаследовать свой класс. Однако при создании класса использовать виртуальное наследование неэффективно, если наследуются поля, так как доступ к полям всегда будет осуществляться через дополнительный указатель.

Замена множественного наследования наследованием от интерфейсов в других языках объектно-ориентированного программирования

Интерфейсы являются заменой множественному наследованию.

 

Вывод: одинарное наследование в стиле Java, C++, Delphi допустимо только от классов, множественное – от интерфейсов. Иначе можно осуществлять множественное наследование лишь от классов, в которых отсутствуют поля.

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)