#include <iostream>
using namespace std;
struct Left
{
char i = 'k';
};
struct Right
{
int a = 99;
};
class Bottom : public Left, public Right
{};
int main()
{
Bottom b;
Left l = b;
cout << l.i;
Right r = b;
cout << r.a;
return 0;
}
// output
// k99
Как это работает?расположение памяти в множественном наследовании
если расположение память Дно:
Left
Right
Bottom
Тогда нарезка b
(т.е. Bottom
) для Left
объекта, должно быть в порядке, но как она может работать, когда я нарежьте Bottom
к Right
объекта?
Примечание: все это было бы нормально, если бы я использовал литье. Но я не сделал этого.
Вы отрезали часть 'Right', в чем проблема? Другими словами, вы называете 'Right :: Right (Right const &)' как 'b' как аргумент, и эта функция может читать' ba' и назначать 'this-> a' –
Когда я делаю' Right r = b', я получаю объект 'Right' из объекта' Bottom', без кастинга. так как компилятор выяснил правильное смещение? – Kam
Компилятор решает, какой будет макет памяти для «Bottom», он знает, где части находятся точно так же, как он знает, где какая-либо конкретная переменная-член –