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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2012, 18:27   #21
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Там с ключевым словом "virtual" есть свои заморочки
Так и я про то-же.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 18.07.2012, 19:00   #22
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

"Полиморфизм" - "множество форм".

Любое явление, способное иметь множество форм является полиморфным.

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

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

На языке с++ существуют две технологии полиморфизма:

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

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

Таким образом, полиморфизм на языке с++ - это лишь иллюзия полиморфности типов.
Технологии могут обеспечивать полиморфность поведения объектов, но не самих типов данных.
А полиморфность поведения объектов можно реализовать множеством самых разных способов и без всякого virtual

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

Цена за это: потери на поддержку механизма виртуальных функций, и ужассающе монстроподобный хардкор на шаблонах.

Впрочем, есть серьёзное подозрение, что "полиморфизм" динамических языков - суть тоже самое, только "стандартизированная технология, которую поддерживает компилятор динамического языка".

То есть, там на уровне компилятора так же используется механика указателей на функции и тд и тп.

Последний раз редактировалось _Bers; 18.07.2012 в 19:09.
_Bers вне форума Ответить с цитированием
Старый 18.07.2012, 19:11   #23
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
"Полиморфизм" - "множество форм".
А ещё нужно понимать, что такое "Множество форм". В консольных приложениях, это означает "множество потоков". В Билдере, множество визуальных форм (и потоков). В VS, множество визуальных, виртуальнх форм и потоков.
Так, что-же такое полиморфизм?
На мой взгляд, одна из форм неопределённости понятий.
Просто, авторы языка несколько не правильно выразили свою мысль.
В инете, есть много определений. И в классической литературе, никто толком об этом ничего не знает.
Нет, есть частные определения, но строгого - нет.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 18.07.2012, 19:19   #24
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
А ещё нужно понимать, что такое "Множество форм".
"Множество форм" - это самая обычная обывательская фраза. Это же не какой нибудь научный термин)

Вот можно например сказать: "множество яблок". Что это значит? Что яблоко не одно, а их множество.

Здесь - тоже самое. Множество форм у одной и той же сущности.

Если речь идет об экземпляре класса - у экземпляра может быть несколько различных строений. Однако, на языке с++ типы статичны.
Но можно сделать иллюзию того, что они полиморфны. И работать с ними, как с полиморфными.
_Bers вне форума Ответить с цитированием
Старый 18.07.2012, 19:25   #25
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
"Множество форм" - это самая обычная обывательская фраза. Это же не какой нибудь научный термин)

Вот можно например сказать: "множество яблок". Что это значит? Что яблоко не одно, а их множество.

Здесь - тоже самое. Множество форм у одной и той же сущности.

Если речь идет об экземпляре класса - у экземпляра может быть несколько различных строений. Однако, на языке с++ типы статичны.
Но можно сделать иллюзию того, что они полиморфны. И работать с ними, как с полиморфными.
Вот все поняли, что я просто прикалываюсь. А, Вы пытаетесь объяснить прописные истины.
Вы хороший человек и в репутацию, Вам ++.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 18.07.2012 в 19:28.
Smitt&Wesson вне форума Ответить с цитированием
Старый 18.07.2012, 22:13   #26
Last
В прострации
Форумчанин
 
Регистрация: 13.01.2009
Сообщений: 239
По умолчанию

Smitt&Wesson, я-то тут при чём? Я лишь хотел попросить ТС подробнее описать что именно ему непонятно
Пол-жизни сидючи, в монитор глядючи...
Last вне форума Ответить с цитированием
Старый 18.07.2012, 22:14   #27
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Например: есть телефон, на нем есть 9 клавиш, любую клавишу можно использовать одним и тем же НАЖАТИЕМ, а результат будет у каждой клавиши свой..

Я правильно понял?
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 19.07.2012, 09:22   #28
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от asmars Посмотреть сообщение
Например: есть телефон, на нем есть 9 клавиш, любую клавишу можно использовать одним и тем же НАЖАТИЕМ, а результат будет у каждой клавиши свой..

Я правильно понял?
Не совсем. Скорее что можно сделать разные телефоны у которых "схема" клавиатуры будет одна и та же но при нажатии на одну и ту же клавишу результат будет разный. Иными словами, берем СТАРУЮ клавиатуру и МЕНЯМ ее функционал в плане реакций на нажатие. Главное то, что для этого нам НЕ НАДО менят код самой клавиатуры.

Полиморфизм позволяет старому коду вызывать новый (без переделывания кода).
waleri вне форума Ответить с цитированием
Старый 19.07.2012, 09:27   #29
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Ну вот наконец тройной с**ч закончился вменяемым объяснением ТС. А то я уже устал читать.
2asmars - правильно, правильно.
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 19.07.2012, 09:27   #30
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
blacktener

В жабе для всех методов применяется ранее связывание, то есть по сути они ВСЕ являются виртуальными.

А это уже особенности реализации.
Что именно? Что все функции виртуальны или что это реализовано через указатель? Если первое, то отнюдь, это прописано в спецификации языка.
waleri вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Полиморфизм Anubys Помощь студентам 1 26.12.2011 20:42
Полиморфизм Zorgan Visual C++ 22 29.08.2011 12:23
Полиморфизм MasterSporta Общие вопросы C/C++ 3 10.04.2011 23:46
полиморфизм slayerblya Общие вопросы C/C++ 1 27.02.2011 01:43
Полиморфизм mister2010 Общие вопросы C/C++ 30 24.05.2010 01:07