Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2013, 12:46   #11
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от SAMOUCHKA Посмотреть сообщение
На мой взгляд было бы гораздо гибче если разрешить определять не все функции. А если какая то не определена значит она не нужна в данном классе и ее вызов запретить.
Таким образом используется только тот интерфейс который нужен в данном классе. И тут появилось бы большее различие между виртуальной и чисто виртуальной функциями .
Такое мое мнение.
Твоя идея противоречит самой идеи программирования через интерфейсы.

Код:
void Foo(  IBase* agent); //<--- принимает указатель на базу, ничего не зная о наследниках
Вызывающая сторона априори может работать с любыми наследниками IBase, какими бы они ни были. Потому что все, что ей нужно - это дергать базовый функционал.

В твоем случае,вызывающей стороне нужно будет знать точно, что за наследник к ней пришел, что бы знать, какие методы можно дергать, а какие нельзя.

Для этого, тебе придется в каждую такую функцию внедрять код рантайм-идентификации типов, и логику обработки каждого наследника.
Что сразу же скажется и на сложности кода (много лишних трудно-понимаемых букв получится), и на производительности (много лишних проверочных действий, и дополнительных логик по обработке)

С таким же успехом, вместо одной:
Код:
 void Foo(  IBase* agent);
Можно сразу писать армию перегрузок:
Код:
void Foo(  Derrived1* agent);
void Foo(  Derrived2* agent);
void Foo(  DerrivedN* agent);
И обрабатывать каждого конкретного потомка индивидуально.
Интерфейсы для этого уже не нужны.

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


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Полиморфизм Кудаив Помощь студентам 3 20.05.2012 14:03
Полиморфизм. Wa1demar Общие вопросы C/C++ 0 04.03.2012 14:23
Полиморфизм Zorgan Visual C++ 22 29.08.2011 12:23
Полиморфизм MasterSporta Общие вопросы C/C++ 3 10.04.2011 23:46
Полиморфизм mister2010 Общие вопросы C/C++ 30 24.05.2010 01:07