Điều gì xảy ra trong ví dụ sau?Tham chiếu lớp cơ sở - gán loại khác cho nó
struct B { };
struct D1 : B { };
struct D2 : B { };
int main()
{
D1 d;
D2 d2;
B& x = d;
x = d2;
}
Tôi biết tham chiếu không được chỉ định lại. x
vẫn đề cập đến d
, nhưng sau đó làm cách nào bạn có thể chỉ định d2
đến d
?
Một số chi tiết:
struct B
{
B() { x = 0; }
int x;
virtual void foo() { cout << "B" << endl; }
};
struct D1 : B
{
D1() { x = 1; }
virtual void foo() { cout << "D1" << endl; }
};
struct D2 : B
{
D2() { x = 2; }
virtual void foo() { cout << "D2" << endl; }
};
int main()
{
D1 d;
D2 d2;
B& x = d;
x.foo(); //D1
//x.x is 1 here
x = d2;
x.foo(); //also D1
//but x.x is 2 here
}
Nó có vẻ như x.x
đã được cập nhật, nhưng vftable không ... Tại sao?
+1. Câu hỏi hay. – Nawaz