A::operator=(const A& value);
будет выполнено.obj1
неявно приведено (static_cast) к const A&
.
Таким образом, ваше obj=obj1;
эквивалентно
obj = static_cast<const A&>(obj1);
Очевидно, что неявно сгенерированное назначение будет назначать каждый нестатический член A
.
Чтобы отрицать это, используйте частное / защищенное наследование.Используя публичное наследование, вы заявляете, что все объекты типа B
могут на законных основаниях использоваться как объекты типа A.
Вы также можете явно объявить
A& A::operator=( const B& value );
Или вытакже может определять
A& A::operator=( const A& value );
, чтобы вести себя полиморфно.