Re: Динамический полиморфизм приперегрузке функций
От: Аноним  
Дата: 16.07.07 09:09
Оценка: 2 (2) +1
Методы getSelf в классах-потомках отличаются от метода getSelf класса Base возвращаемым типом — и, соответственно, не перегружают его, а скрывают (о чем компилятор наверняка пишет warning). Классы Derived1 и Derived2 не имеют перегруженного метода Base* getSelf(), и наследуют его от базового класса. Таким образом, в строчке, где возникает ошибка, всегда вызывается метод Base::getSelf.

Сделать то, что хочется, можно так (это, фактически, паттерн Visitor):

class Base
{    
public:
    virtual void testMe(Tester* t) = 0;
};

class Derived1 : public Base
{
public :
    virtual void testMe(Tester* t)
    { t->Test(this);}
};

class Derived2 : public Base
{    
public :
    virtual void testMe(Tester* t)
    { t->Test(this);}
};
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.