Tôi đã tìm thấy một hành vi lạ khi sử dụng biến tham chiếu.Biến tham chiếu và chức năng ảo
Đây là triển khai lớp:
class Base {
public:
virtual void Method() = 0;
};
class DerivedA : public Base {
public:
virtual void Method() {}
}
class DerivedB : public Base {
public:
virtual void Method() {}
}
Dưới đây là một ví dụ mã mà có hành vi lạ:
void main(int argc, char *argv[]) {
DerivedA a;
DerivedB b;
Base &base = a;
base.Method(); // Calls DerivedA::Method
base = b;
base.Method(); // Calls DerivedA::Method!!! Why doesn't call DerivedB.Method()?
}
Tóm lại, có vẻ như chức năng ảo bảng con trỏ "liên quan" đến biến tham chiếu chỉ xác định khi khởi tạo biến tham chiếu. Nếu tôi gán lại biến tham chiếu, vfpt sẽ không thay đổi.
Điều gì xảy ra ở đây?
Tôi nghĩ câu trả lời này xứng đáng được đánh dấu màu xanh lá cây! – Walter
Vâng, tôi nghĩ rằng đây sẽ là câu trả lời được chấp nhận. – Rafid
Cảm ơn, mặc dù câu trả lời được chấp nhận là một trong những người hỏi đã chấp nhận và nó là okay rằng ông chấp nhận câu trả lời khác ;-) –