На самом деле, то, что называется, является неявно определенным operator =
для Derived
. Определение, предоставленное компилятором, в свою очередь вызывает operator =
для Base
, и вы видите соответствующий вывод. То же самое с конструктором и деструктором. Когда вы оставляете это для компилятора для определения operator =
, он определяет его следующим образом:
Derived& operator = (const Derived& rhs)
{
Base1::operator =(rhs);
...
Basen::operator =(rhs);
member1 = rhs.member1;
...
membern = rhs.membern;
}
где Base1,...,Basen
- базы класса (в порядке их указания в списке наследования), а member1, ..., membern
- члены Derived (не считая членов, которые были унаследованы) в порядке, который вы объявили в определение класса.