С++ перегрузка оператора =
Всем привет,
У меня есть к вам вопрос о перегрузке operator = для производных классов.
Предположим, например, что два класса A, B определены следующим образом:
class A { protected: double v_; public: A(double initVal = 0.0) : v_(initVal) {} virtual ~A() {} double v() { return v_; } void v(double val) { v_ = val; } A& operator=(A& src) { this->v(src.v()); } }; //defining sum A operator+(A& add1, A& add2) { A res; res.v(add1.v() + add2.v()); return res; } class B : public A { public: B(double initVal = 0.0) : A(initVal) {} virtual ~B() {} B(B& src) : A(src.v()) {} B(A& src) : A(src.v()) {} B& operator=(B& src) { B res; res.v(src.v()); return res; } B& operator=(A& src) { B res; res.v(src.v()); return res; } };
теперь если я отлажу следующие строки:
A a(1.0); B b(2.0); B c; //first Assignemnt c = a; //second assignment c = a + b;
я вижу что оба задания проходят через это
B& B::operator=(A& src)
Теперь, если я изменю
B& operator=(B& src)
к
B& operator=(B src)
второе задание (с суммой) проходит через этот оператор.
Кто-нибудь может объяснить, почему это происходит?
спасибо
Что я уже пробовал:
Является ли причина такого поведения неявным приведением?