В следующем коде я понимаю, что оператор присваивания в структуре d не вызывается на derived1 = derived2;
, а вместо этого создается и вызывается оператор присваивания по умолчанию. Однако я не понимаю, почему:
Почему не вызывается явный оператор присваивания d для derived1 = derived2;
, когда восходящее преобразование неявно в b & base2 = derived1
? Я предполагаю, что заключается в том, что значение по умолчанию operator=
(с заголовком void operator=(const derived& d)
) всегда генерируется, если явно не перегружено одним и тем же заголовком, и всегда будет соответствовать назначению, сделанному из двух переменных того же типа. На правильном ли я пути?
struct b {
int x;
void operator=(const b& base) {
std::cout << "base" << std::endl;
}
}
struct d: b {
int y;
void operator=(const b& base) {
std::cout << "derived" << std::endl;
}
}
int main() {
b base1;
d derived1;
d derived2;
b & base2 = derived1;
derived1 = base1; // output: "derived"
derived1 = derived2; // output "base"
}