Tôi luôn nghĩ đến việc phải sử dụng con trỏ cho đa hình. Sử dụng ví dụ kinh điển:Tham chiếu và con trỏ có liên quan đến đa hình không?
DrawEngine::render(Shape *shape)
{
shape->draw();
shape->visible(true);
}
Và chuyển đến con trỏ tới các lớp có nguồn gốc khác nhau. Nó có hoạt động giống với tham chiếu không?
DrawEngine::render(Shape &shape)
{
shape.draw();
shape.visible(true);
}
Thậm chí là nó hợp lệ để làm:
engine.render(myTriangle); // myTriangle instance of class derived from Shape
Nếu công trình này, được có bất kỳ sự khác biệt giữa hai trường hợp? Tôi đã cố tìm thông tin trong Stroustrup, nhưng tôi không tìm thấy gì cả.
Tôi mở cửa trở lại vì tôi muốn khám phá thêm một chút nữa.
Vì vậy, ít nhất một sự khác biệt là dynamic_cast. Đối với tôi, đa hình bao gồm việc sử dụng dynamic_cast.
Tôi có thể đi
Rhomboid & r = dynamic_cast<Rhomboid &>(shape);
gì sẽ xảy ra nếu các diễn viên không? Điều này có khác gì không?
Rhomboid * r = dynamic_cast<Rhomboid*>(&shape);
@ pm100: Trực tiếp, chắc chắn, nhưng có các khía cạnh khác nhau. Ví dụ, 'dynamic_cast' sẽ ném một ngoại lệ hơn là trả về null trên một dàn diễn viên xấu. – GManNickG
@GMan: Tôi nghĩ về ví dụ 'dynamic_cast' là sự khác biệt cơ bản giữa con trỏ và tham chiếu: con trỏ có thể là NULL một cách hợp pháp, trong khi tham chiếu không thể. Trung tâm của câu hỏi, như tôi đã đọc, liệu các tham chiếu có hoạt động giống nhau không đối với các bảng ảo. Do đó câu trả lời ngắn gọn. –
Cách tôi nhìn thấy nó, tài liệu tham khảo có vẻ là ít hơn so với cú pháp đường trên đầu trang của con trỏ. –