2012-04-06 7 views
1

Я пытаюсь сделать оператора, который позволит мне добавить целое число в один из моих классов, но у меня возникают проблемы следующим образом.Перегрузка двоичных операторов и полиморфизм

struct Base 
{ 
    //Will have value of zero 
}; 

struct Derived : public Base 
{ 
    int value_; 
}; 

int & operator+=(int & num, Base & b); 
int & operator+=(int & num, Derived & d); 

С внедрением операторной

int & operator+=(int & num, Base & b) 
{ 
    return num; 
} 

int & operator+=(int & num, Derived & d) 
{ 
    num += d.value_; 
    return num; 
} 

Так у меня есть вектор, и я пытаюсь итерацию через него и добавить все значения для одного целого. Однако даже те, которые имеют тип Derived, не изменят сумму.

Как я могу заставить оператора перегружать полиморфные?

+0

Существует какой-то смешной запах вокруг всей идеи, но, во всяком случае, вы должны указать определение своего * vector *. Первая потенциальная проблема заключается в том, что все ваши объекты были нарезаны на «Base» ... –

ответ

0

Вот хороший доктор. dobbs, которая представляет 3 решения вашей проблемы. http://drdobbs.com/cpp/200001978 Один из них, и я думал об одном и том же, заключается в том, что вы можете полагаться на своих операторов на виртуальные функции-члены или вспомогательные функции.

Смежные вопросы