Giả sử tôi được cấp một thư viện C++ đầy thừa kế. Tôi được đưa ra một hàm Base*
trong một hàm khi tôi biết rằng nó thực sự trỏ đến một đối tượng Derived
và Derived
kế thừa Base
. Nhưng tôi không biết loại thừa kế là gì (công cộng/được bảo vệ/riêng tư). Tôi cũng không biết nếu có bất kỳ chức năng ảo trong hệ thống phân cấp.static_cast vs dynamic_cast
Với tình hình này, mà không nhìn vào mã nguồn/tài liệu của Base
và Derived
, mà cast tôi nên sử dụng? Hay tôi nên tham khảo mã/tài liệu trước để đảm bảo tính đa hình?
nền
Tôi viết thư này changeEvent
chức năng của QMainWindow
trong Qt 4.7. Chức năng changeEvent
mất QEvent*
mà tôi có thể truyền sang loại khác bằng cách biết QEvent::type()
. Tôi đã tự hỏi nếu tôi nên sử dụng static_cast
hoặc dynamic_cast
.
Cảm ơn.
Nếu bất kỳ thư viện nào bạn sử dụng đều sử dụng thừa kế 'được bảo vệ', đã đến lúc tìm thư viện viết tốt hơn. –
Câu hỏi này có thể giúp: http://stackoverflow.com/questions/28002/regular-cast-vs-static-cast-vs-dynamic-cast –
@Zac: Ước gì tôi có thể bình luận. Làm thế nào bạn có thể đánh giá liệu được thừa kế có bảo vệ hay không là công cụ thích hợp cho công việc nếu bạn không biết thư viện đó làm gì? – Puppy