![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
sergioK1 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
Собвенно когда вышла жава все были довольны тем что все функции виртуальны ,
тем более что тормоза по этой причине за которые многие ругали OOP полный миф , Ну язык он есть такой , ну покему когда сам разрабатывешь не сделать virtual ? захотят перегрузить перегрузят , не захотят - ничего не случиться, P.S. в С# такая же фича , разрабатывать не возможно ![]() |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
sergioK1, а С++ тут при чем ?
![]() ![]() |
|||
|
||||
sergioK1 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
При том читать надо что пишут ![]() На С++ разрабатывать тяжело без возможности наследовать почему не облегчить жизнь, тупо ![]() Если второй раз не понял - меняй профессию ![]() ![]() |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
а зачем делать тупо, когда для тех, кому нехватает прелестей явы, могу спокойно перейти на ява ? С++ предоставляет гораздо больше возможностей, часть из которых Вы хотите легким движением руки отсечь, только потому, что лень виртуал написать, когда это нужно.. У С++ другие цели и другая идеология... |
|||
|
||||
sergioK1 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
Что отсечь? наооборот добавить для удобства, Ясно что getData может быть изменен так чего не поставить virtual ? Не та идеология в чем ? |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Помню, в начале-середине 90-х был такой борландовский продукт - TurboVision. Мне понадобилось-то внести небольшие изменения в оболочку одной программы, основанной на этом самом TurboVision. Ха. Нужные методы не были объявлены virtual. Хорошо, что Борланд дал исходные коды TurboVision. Перекомпиляция всего TurboVision на новейшей скоростной 386 системе занимала 4 часа. Путём оптимизации заголовков удалось снизить это время до получаса. Потом ещё несколько раз я вставлял virtual в нужные мне места. И если бы изначально все методы были бы виртуальными, то вся эта дурацкая деятельность была бы не нужна. Поэтому считаю вопрос правомерным.
С другой стороны, так изначально был построен C++. Ну вот именно так и никак иначе. Решение о том, будет какой-либо метод виртуальным, принимается разработчиком исходя из логики проектирования классов. Посмотрите на MFC - большинство методов виртуальные. Но не все! В java я тоже могу понатыкать final где не попадя, осложнив жизнь другим программистам. Шучу))) Поэтому вопрос "когда сам разрабатываешь, не сделать virtual" теряет свою правомерность и отправляется целиком к разработчику конкретного продукта...
Вот, кстати, не факт. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
sergioK1 |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
В MFC да , В яве ставят final когда осознанно хотят закрыть наследование осознанно, в С++ какие соображения? тот же буст хоть и студенты писали (хоть и Беркли) ну не могли же они не понимать необходимости в возможной перегрузке например stack reserve , |
||||
|
|||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
1. если автоматом у каждого класса будет таблица виртуальных методов, то о метапрограммированнии можно будет забыть.. 2. в моей практиктике витуальная функция одна на сто или более невиртуальных... а в некоторых случаях меня не устраивает родная виртуальность, и я пишу свою.. тоже забыть ?? 3. в С++ структура и класс ничем по сути не отличаются... В блоки данных тоже помещать таблицу ? 4. Зачастую интерфейс про функцию намного более приемлим, чем интерфейс про класс.. И зачем тогда классовая виртуальность ? 5. ну про конструктор умолчим... и многое многое другое... сейчас лень напрягаться и вспоминать...
перегрузку(overload) с переопределением(override) не путатете ? что ж тогда на виртуальность то замахнулись ? нужна виртуальность во всем берите другие языки, в которых еще и рефлексия к тому же есть.. Нужен еще С++ - используйте связку.. Не надо все разнообразие задач сводить под студенческие требования... |
||||
|
|||||
sergioK1 |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
Ой только не надо лигвистики :-D перегрузка это когда есть функция а наследник имет свою реализацию , хотите пусть будет переопределение, Если честно Я ваших аргуметов ничего не понял , ни про метопрограмирования ни про class vs structure . в других языках это нормально, в С++ нет какая разница, ? По проще можно . |
||||||
|
|||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
перегрузка это наличие двух (или более) функций, различаемых типом вызова.. а переопределение, это изменение поведения одной и той же.. другие языки не предоставляют того, что предоставляет С++.. именно за это многообразие, а также за наличия прямого доступа к внутренним представлениям и ругают многие С++.. мол много учить, или мол легко прострелить себе колено.. Все то оно конечно оно так, но зато какие возможности открывает за собой С++. Да многим этим возможности и не нужны, но с другой стороны для них уже дельфи с шарпом есть.. Да С++ не лишен недостатков, и много где он бессилен.. Но на то и разнообразие языков, чтоб для каждой задачи выбирать подходящий... |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
P.S. я не против внедрения механизмом, испробованных одним языком в другой.. я против привведения С++ в только-студенто-ориентированный язык...
вначале посмотрите сколько людей, которые вообще не нужна виртуальность... и за что им будут связывать руки ?! мало того, что цена вызова дорогая, к тому же лишний размер.. но это мелочи, хоть за нич тоже надо платить.. но вот к примеру, как мне в случае маниакальной виртуальности, получить структуру совместимую с С ? заводить новый тип для обычных структур ? а зачем ? |
|||
|
||||
sergioK1 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
Я предлагаю строить грамотный дизайн даже если это на С++ ![]() И там где есть бизнес обьект он может быть перегружен наследником , И еще чтобы mes внятно и по русски разьяснил третьей попытки , что он имеет ввиду ![]() желательно простыми примерами, вызов виртуал функции дороже чем обычной - чушь ![]() Даже обсуждать лень, |
|||
|
||||
mes |
|
||||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
скажите это микроконролерщикам.. которым даже обычный вызов бывает дорог..
так я двумя руками за граммотный.. только я против считать явскую корявость граммотным дизайном.. Пусть на ней студенты развлекаются... http://codepad.org/kGYnfiS8
теперь попробуйте повторить с #define V virtual.. |
||||||
|
|||||||
volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Этот вопрос (слава богу!) не нужно обсуждать. Достаточно просто измерить:
http://codepad.org/J9Vb0nl9 На домашней машине, при полной оптимизации, виртуальная функция в среднем в 5 раз медленее чем простая. Это сообщение отредактировал(а) volatile - 14.7.2013, 10:59 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |