Нет, это не вызовет функцию базового класса. Класс B имеет operator+
, он не принимает правильный параметр, конец истории.
Вы можете определить operator+
как свободную функцию, но не в любом классе. Возможно, друг, если ему нужен доступ к личным данным:
A operator+(const A &lhs, const A &rhs) { ... }
B operator+(const B &lhs, const B &rhs) { ... }
Тогда b + a вызовет первый оператор, как и a + b. b + b назовет второго.
В качестве альтернативы, вы можете «убрать» реализацию базового класса, поместив это в класс B:
using A::operator+;
хотя, вероятно, лучше этого не делать. Большинство операторов работают лучше как свободные функции, потому что тогда вы получаете автоматические преобразования для обоих операндов. C ++ никогда не выполняет преобразования на LHS вызова функции-члена.
Кстати, оператор + почти наверняка должен возвращать по значению, а не по ссылке, поскольку автоматическая (стековая) переменная больше не существует после возврата из функции. Поэтому вызывающей стороне должна быть передана копия результата, а не ссылка на него. По этой причине оператор + и наследование не являются хорошим сочетанием, хотя, вероятно, они могут работать, пока вызывающая сторона знает, что они делают.