Hãy xem xét các đoạn mã sau:Hành vi của đối tượng C++ Reference
class Window // Base class for C++ virtual function example
{
public:
virtual void Create() // virtual function for C++ virtual function example
{
cout <<"Base class Window"<<endl;
}
};
class CommandButton : public Window
{
public:
void Create()
{
cout<<"Derived class Command Button - Overridden C++ virtual function"<<endl;
}
};
int main()
{
Window *button = new CommandButton;
Window& aRef = *button;
aRef.Create(); // Output: Derived class Command Button - Overridden C++ virtual function
Window bRef=*button;
bRef.Create(); // Output: Base class Window
return 0;
}
Cả Aref và BREF được giao * nút, nhưng tại sao là hai đầu ra khác nhau. Sự khác biệt giữa việc gán cho loại Tham chiếu và loại Không tham chiếu là gì?
Vì vậy, với người xây dựng bản sao này ràng buộc trễ đơn giản là không xảy ra, phải không? –
Pháo thủ: Liên kết muộn không có liên quan ở đây. Bạn đang tạo đối tượng được nhập tĩnh mới không phải là đối tượng được nhập động (vì bạn cần tham chiếu hoặc con trỏ). –
destructor ảo hoặc được bảo vệ. Trong nhiều thiết kế, chức năng của thành viên được gọi là đa hình mà không xóa đa hình. –