Re[5]: method(obj) то же самое, что и obj.method() ? Что за
От: dr.Chaos Россия Украшения HandMade
Дата: 05.07.07 10:45
Оценка:
Здравствуйте, LaPerouse, Вы писали:

DC>>Гхм... Зачем? Помнишь в С++ есть такая штука — перегрузка метода. Те типы принимаемых значений являются частью сигнатуры функции. А компилятор зная тип параметра выбирает нужную функцию. Это и есть специальный(ad hoc) полиморфизм.


LP>Может, хватить путать инстанс объекта с его типом?


LP>

LP>class A : public Interface
LP>{
LP>}

LP>class B : public Interface
LP>{
LP>}

LP>void foo(A* object)
LP>{
LP>}

LP>void foo(B* object)
LP>{
LP>}

LP>void test()
LP>{
LP>Interface* object1 = new A();
LP>Interface* object2 = new B();

LP>foo((A)object1);
LP>foo((B)object1);
LP>}
LP>


LP>Компилятор требует явного приведения типов при вызове соот.в функции. Т е нужно делать dynamic cast , делать нужный каст и вызывать нужную функцию, что НИЧЕГО ОБЩЕГО С ПОЛИМОРФИЗМОМ НЕ ИМЕЕТ.


Ты внимательно прочел что я тебе написал? В случае перегрузки мы имеет 2 сигнатуры функции для разных типов, но имя функции одно и получается что одна функция работает для разных типов, т.е. ведет себя полиморфно. В случае с шаблонами во время компиляции просто генерируется нужная сигнатура на этапе компиляции.

Когда ты передал туда укзатель на интерфейс, ты подразумеваешь не конкретный тип а целое семейство типов, которые обладают общим интерфейсом. Функция работает для этого семейства типов, т.е. ведет себя полиморфно.

А как это сделано, через виртуальные функции или еще как, деталь реализации конкретного инструмента (языка).

ЗЫ Складывается впечатление, что ты считаешь полиморфизмом одну из его реализации.
ЗЫЫ По ссылке ходил?
ЗЫЫ Кроме того ты сам подумай зачем городить такую иерархию с интерфейсом, если все равно работаешь с конкретным типов в итоге? Пример синтетический и ИМХО противоречит использованию foo полиморфно.
Побеждающий других — силен,
Побеждающий себя — Могущественен.
Лао Цзы
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.