Рассмотрим эти классы, которые будут действовать как базовые классы:
struct Base1 {
int b1;
void print_Base1_addr() const { std::cout << this << '\n'; }
};
struct Base2 {
int b2;
void print_Base2_addr() const { std::cout << this << '\n'; }
};
Если Derived
наследует от Base1
и Base2
:
struct Derived: Base1, Base2 {
int i;
void print_addr() const { std::cout << this << '\n'; }
};
Тогда этот код печатает тот же адрес для this
в Derived
и Base1
, но не в Base2
:
Derived d{};
d.print_addr();
d.print_Base1_addr();
d.print_Base2_addr();
Я не понимаю, почему this
в Derived
имеет такой же адрес, как в Base1
. Это не пустые классы, так как все они содержат элемент данных (адреса элементов данных b1
и i
отличаются). Как будто Base1
перекрывается с Derived
.
Что я пропускаю?