29 / 23 / 2
Регистрация: 14.04.2009
Сообщений: 448
|
|
1 | |
Полиморфизм своими словами02.06.2009, 14:04. Показов 13396. Ответов 36
Метки нет (Все метки)
Дайте определения полиморфизма своими слова. А так же примерчик, который ярко выражает полиморфизм.
Спасибо.
0
|
02.06.2009, 14:04 | |
Ответы с готовыми решениями:
36
Кто может своими словами объяснить нубу Как описать данный цикл своими словами ? Доказательство корректности алгоритма Краскаля "своими словами" Удалить пробелы, стоящие между первым вторым словами, а также между двумя последними словами |
06.05.2013, 14:01 | 22 |
Зачем?
Здесь getRadius() и есть тот самый единый интерфейс. Добавлено через 1 минуту Про RTTI ничего не сказано. Добавлено через 2 минуты Ой! Добавлено через 3 минуты Про наследование ничего не сказано
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||
06.05.2013, 14:14 | 23 | |||||
Затем чтобы можно было использовать разнотипные объекты, реализующие интерфейс. В Вашем, например, случае нельзя SUN и EARTH добавить в единый контейнер (не прибегая к каким-нибудь хакам с void*).
Пример кривоват, но суть показывает.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
06.05.2013, 14:20 | 24 | |||||
Сообщение было отмечено как решение
Решение
Tulosba, Это динамический полиморфизм, да.
Есть так же статический
4
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
06.05.2013, 14:32 | 29 |
programina, Можно. А это столь критично?)
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
06.05.2013, 14:39 | 31 |
Тут упомянули про статический полиморфизм и привели пример с шаблонами (т.е. определение реализации на основании типа шаблонного аргумента). Так вот, перегрузка - это тоже статический полиморфизм, и спорить тут действительно не о чем, потому что это тоже полиморфизм. "Интерфейсом" в данном случае выступает не совокупность методов, имеющих разные реализации, а совокупность имён методов или функций, имеющих разные наборы или типы формальных параметров (и, соответственно, реализации). Т.е. если в динамическом полиморфизме вы вызываете метод и не задумываетесь, какая реализация будет вызвана, то в статическом полиморфизме вы изначально не задумываетесь, что это за метод/функция, достаточно помнить единое имя и какой интерфейс она имеет (какие параметры принимает).
1
|
1 / 1 / 0
Регистрация: 09.02.2013
Сообщений: 15
|
||||||
06.05.2013, 15:15 | 32 | |||||
Перегрузка - это перегрузка.
Полиморфизм - это полиморфизм. Эти два слова никак не синонимы, и даже не похожи по значению. Полиморфизм не может быть статическим или динамическим, это просто полиморфизм. Я конечно не профи с++, но такое вообще впервые слышу и даже не логично, ведь полиморфизм это часть ООП, а перегрузка может использоваться везде. Когда кто-то говорит слово полиморфизм, лично у меня мысли только о методах с одним именем и разными реализациями. Я считаю что это бред начинать предавать какие-то левые значения этим двум понятиям. Ты говорил про примеры с шаблонами, но какая разница что шаблон или нет, полиморфизм выглядит одинаково везде. Перегрузка выглядит так и только так:
Если я не правильно понимаю, то наведи мне пример.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
06.05.2013, 15:38 | 34 |
_SOKOL_,
1
|
1 / 1 / 0
Регистрация: 09.02.2013
Сообщений: 15
|
|
10.05.2013, 12:34 | 35 |
http://ru.wikipedia.org/wiki/C... 0.B7.D0.BC
Английский понимаю, но лень читать было, вот на русском. Сегодня решил разузнать о полиморфизме. Получается я уже пользовался статическим и динамическим, но всё равно буду пожизненно отрицать что перегрузка функций это частичный случай полиморфизма, никак не может быть перегрузка даже похожей на полиморфизм.
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
10.05.2013, 12:59 | 36 |
Ага, осталось только отринуть истинность теоремы Пифагора - и в путь.
Где "там"? В убогой статье по плюсам в русской вики, ссылку на которую вы привели? Да, там не говорится. Но довольно странно изучать термин по статье, написанной по конкретному языку программирования. Например, в (достаточно посредственной) статье по полиморфизму, на которую есть ссылка и в разделе "Полиморфизм" приведённой вами статьи, говорится о том, что перегрузка - тоже полиморфизм. Правда, начальное определение термина в статье отбивает всё желание читать её дальше, поскольку складывается впечатление, что автор в своей жизни читал только "С++ для чайников", откуда и почерпнул данное определение. Не думаю, что правильно утолять свою жажду знаний посредством статей из русской вики, там встречаются ошибки и неточности, которые зачастую сокрыты за заумно и витиевато написанным текстом. Не по теме: Хм, интересно, а слово "витиевато" не делает мой пост витиевато написанным?..
0
|
Комп_Оратор)
|
||||||||||||||||
10.05.2013, 23:58 | 37 | |||||||||||||||
Оговоюсь сразу, что С++ знаю очень поверхностно и рискую высказаться, т.к. сам не уверен в том, что правильно понимаю вопрос. Полиморфизм, это конечно "один интерфейс - много методов", но как указывают многие авторы, нет возможностей ООП, воплощённых в виде классов, которые нельзя было бы реализовать в модульном, процедурном коде.
μορφή — форма, то есть полиморфизм - способность менять форму. Мои наблюдения говорят о том, что полиморфизм в С++, реализуется за счет полиморфизма, заложенного в природу указателя как такового, и/или за счёт возможности контроля типов во время выполнения. При этом выяснение фактического типа, позволяет выяснить поведение кода, без явного применения логических операторов и операторов ветвления в точке изменчивости. Можно изменить поведение кода, явно применив логическую операцию к значению переменной:
Возможность создавать сложные пользовательские типы, позволяет ветвить код не применяя такие операторы явно, но при этом тип используется как переменная для принятия решения:
Перегрузка функций, за счёт применения разнотипных аргументов, может вызывать изменчивость, проявляемую на стадии выполнения в точке вызова. При этом, переадресация происходит за счёт использования того или иного значения указателя на функцию, в зависимости от типов аргументов. То есть идея та же, вроде. Я рискну сказать, что полиморфизм это способность программы изменять поведения в зависимости от того, на что конкретно указывает определённый указатель во время выполнения. Тем не менее, отсутствие опыта не даёт мне примеров, когда сама инициализация такого указателя не задана явной логикой. Напоследок шутка, демонстрирующая факт, что указатель на тип не является законченным типом и поведение кода зависит от того, на что он в действительности указывает. "Чары С" в С++:
Под классическое тоже, - наиболее эффективные, реализуют один и тот же интерфейс, что и правильный код.
0
|
10.05.2013, 23:58 | |
10.05.2013, 23:58 | |
Помогаю со студенческими работами здесь
37
Удалить пробелы, стоящие между первым и вторым словами, а также между двумя последними словами Дана строка текста, между словами текста минимум один пробел.Написать программу, которая между словами текста ставит по три точки!! Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |