Доброго времени суток. Меня интересует вопрос. Имеется вот такой код:
#include <iostream>
using namespace std;
class A
{
public:
int a;
};
class B : public A
{
public:
int b;
};
int main()
{
A a;
B b;
a = b;
//b = a;
return 0;
}
Почему этот код работает? Какая логика у компилятора, когда он делает такое присваивание? Кто может обьяснить.
Правильно ли я рассуждаю: он видит присваивание обьекта дочернего класса обьекту базового класса. Он просто копирует все совпадающие поля. А остальные он не трогает. А копирует он так : он сам оператор присваивания для базового класса, и с помощью него присваивает. Элементы дочернего класса он не трогает, так как некуда их присваивать.
Может я где что забыл. Обьясните, пожалуйста.
P.S. А почему не работает код b = a ? ругается на неопределенный operator=. Хотя, по сути, что мешает присвоить дочернему классу базовый? ведь поля совпадают и он тоже может всё красиво сделать. ЧЯДНТ?