Ваш B::operator=
не является оператором копирования. В дополнение к предоставленному вами, есть также неявно определенный оператор копирования-присвоения, который эквивалентен
B& operator=(const B& other) {
A::operator=(other);
return *this;
}
Этот оператор ничего не печатает, но вызывает назначение базового класса, и тот, кто печатает A=
.
b1 = b2
, вызывает этот оператор назначения копирования. b1 = c
звонки B::operator=(A&)
, поскольку C
не является B
.
Если вы хотите, чтобы ваш оператор вызывался, определите оператор назначения копирования с подписью, показанной выше, вместо или в дополнение к другой перегрузке.