Здравствуйте, 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>>
Социализм — это власть трудящихся и централизованная плановая экономика.