У меня есть проблема с перегрузкой и наследованием операторов на C++.Перегрузка и наследование оператора (сохранение того же типа)
Быстрый эскиз:
class A {
public:
A operator+ (const A &b) const { ... }
};
class B : public A {
...
};
Теперь предположим, что у меня есть два экземпляра B
, x
и y
. Если я их добавлю, я получу вещь типа A
, однако я хочу, чтобы она была типа B
.
Каков наилучший способ выполнения этого (кроме переопределения их в классе B
)? CRTP?
Вы можете использовать конструктор в B, преобразующий A в B 'B (const A &)'. Однако, если B содержит дополнительную информацию, перезапишите оператора. –
Вы должны переопределить его в B, но вы можете вызвать реализацию базового класса путем возврата A :: operator + (b); – cppguy
Возможный дубликат [Перегрузка оператора C++ с наследованием] (http://stackoverflow.com/questions/17122111/c-operator-overloading-with-inheritance) – Pradhan