Одним из мощных средств разработки является множественное наследование (см. п. 10.1 в [1]). Впервые оно было реализовано в 1989 году [43]. Этот механизм с концептуальной точки зрения является совершенно естественным: если есть два класса, каждый из которых обладает частью необходимых свойств, то почему бы не объединить эти свойства в одном классе-наследнике? В конце концов, и в реальной жизни у каждого ребенка двое родителей.
Но, как обычно и бывает в этой жизни, «хотели как лучше, а получилось как всегда»: множественное наследование в том виде, в котором оно реализовано в С++, часто является источником проблем и подвергается залуженной критике. Недаром в новейших объектно-ориентированных языках Java и С# множественное наследование классов запрещено, а разрешено только множественное наследование интерфейсов.
Тем не менее при аккуратном и правильном использовании — это полезный и мощный механизм. Множественное наследование очень пригодилось при реализации библиотек классов. Например, в объектно-ориентированной библиотеке ввода-вывода множественное наследование применяется для реализации класса iostream, объединяющего свойства классов istream и ostream.
Другим механизмом С++, который оказался востребованным при разработке больших библиотек классов, является уже упоминавшийся нами в главах 7 и 9 механизм динамической идентификации типов (RTTI). Использование этого механизма позволяет повысить «степень» универсальности библиотеки классов. Фактически разработка этого механизма осуществлялась одновременно с разработкой шаблонов [43], которые тоже предназначены для повышения универсальности. Однако механизм RTTI не очень сложно реализовать «вручную» [12, 26], чего нельзя сказать о реализации шаблонов. Поскольку именно RTTI часто создавали разработчики библиотек, Б. Страуструп, в конце концов, включил в С++ стандартный механизм RTTI [43].
RTTI, так же как и множественное наследование, при программировании на С++ можно рассматривать как «дополнительный» инструмент, являющийся в некотором роде альтернативой виртуальным функциям. И хотя сам Б. Страуструп призывает использовать именно виртуальные функции, принципы работы RTTI значительно понятнее новичкам, чем механизм виртуальных функций. К тому же в некоторых случаях, как пишет сам Б. Страуструп в [43], без RTTI невозможно обойтись.
Опубликовал Kest
November 25 2013 00:58:13 ·
0 Комментариев ·
3997 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.