Re[4]: method(obj) то же самое, что и obj.method() ? Что за
От: LaPerouse  
Дата: 05.07.07 09:28
Оценка:
Здравствуйте, dr.Chaos, Вы писали:

DC>Здравствуйте, Perseus, Вы писали:



LP>>>>В результате при вызове метода method по интерфейсу I вызовется нужная реализация. Ничего подобного нельзя сделать с функциями.

IB>>>Хм...
IB>>>Method(A a)
IB>>>Method(B b)

P>>Это вообще к чему?

P>>В данном случае вам придется делать ЯВНОЕ преобразование типа, те с помощью рантаймовой инфы узнавать тип объекта, делать нужный каст и вызывать нужную функцию, либо ловить ClassCastException Какой к черту полиморфизм?


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


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


class A : public Interface
{
}

class B : public Interface
{
}

void foo(A* object)
{
}

void foo(B* object)
{
}

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

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


Компилятор требует явного приведения типов при вызове соот.в функции. Т е нужно делать dynamic cast , делать нужный каст и вызывать нужную функцию, что НИЧЕГО ОБЩЕГО С ПОЛИМОРФИЗМОМ НЕ ИМЕЕТ.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Социализм — это власть трудящихся и централизованная плановая экономика.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.