Что ж, наследование определяет отношение «является», поэтому вы должны использовать множественное наследование, когда класс «является» несколькими разными вещами. Например, двухсторонняя очередь является одновременно «BackInsertable» и «FrontInsertable». BackInsertable может вызвать требование для метода push_back, а также для FrontInsertable и push_front. Без множественного наследования вам пришлось бы иметь суперклассы для BackInsertable, FrontInsertable и BackAndFrontInsertable. Очевидно, что это плохо масштабируется, когда вы добавляете больше сложности.
Проблемы с множественным наследованием возникают, когда два суперкласса определяют одни и те же переменные-члены или когда вы сталкиваетесь с проблемой алмаза (D1 и D2 наследуют B, а D3 наследует D1 и D2, наследуя B дважды).
Людям это не нравится, потому что очень легко случайно столкнуться с этими проблемами. Как сказал Антигуру, дело не столько в том, что людям не нравится множественное наследование, им просто не нравится его реализация на С++ (и, конечно, есть люди, которые вообще ненавидят объектно-ориентированное программирование, и для них множественное наследование - чистое зло).
person
Peter Alexander
schedule
23.12.2009