16 Overloading [over]

16.5 Overloaded operators [over.oper]

16.5.3 Assignment [over.ass]

Оператор присваивания должен быть реализован нестатической функцией-членом с ровно одним параметром. Поскольку оператор присваивания копии operator= неявно объявляется для класса, если он не объявлен пользователем ([class.copy]), оператор присваивания базового класса всегда скрывается оператором присваивания копии производного класса.

Любой оператор присваивания, даже операторы присваивания копирования и перемещения, могут быть виртуальными. [ Note: Для производного класса D с базовым классом, B для которого было объявлено виртуальное назначение копирования / перемещения, оператор назначения копирования / перемещения в D не отменяет Bвиртуальный оператор назначения копирования / перемещения. [Example:

struct B {
  virtual int operator= (int);
  virtual B& operator= (const B&);
};
struct D : B {
  virtual int operator= (int);
  virtual D& operator= (const B&);
};

D dobj1;
D dobj2;
B* bptr = &dobj1;
void f() {
  bptr->operator=(99);          // calls D​::​operator=(int)
  *bptr = 99;                   // ditto
  bptr->operator=(dobj2);       // calls D​::​operator=(const B&)
  *bptr = dobj2;                // ditto
  dobj1 = dobj2;                // calls implicitly-declared D​::​operator=(const D&)
}

end example] ]end note