Tôi có một lớp Derived
được kế thừa trực tiếp từ hai lớp cơ sở, Base1
và Base2
. Tôi muốn biết nếu nó an toàn, nói chung, để so sánh các con trỏ tới các lớp cơ sở để xác định xem họ đều giống nhau Derived
đối tượng:So sánh con trỏ thừa kế
Base1* p1;
Base2* p2;
/*
* Stuff happens here. p1 and p2 now point to valid objects of either their
* base type or Derived
*/
//assert(p1 == p2); //This is illegal
assert(p1 == static_cast<Base1*>(p2)); //Is this ok?
assert(static_cast<Derived*>(p1) == static_cast<Derived*>(p2)); //How about this?
Các con trỏ có bảo đảm là hợp lệ, nhưng không nhất thiết chỉ đối tượng Derived
. Tôi đoán rằng điều này có lẽ là tốt, nhưng tôi muốn biết nếu nó là ok từ một quan điểm C + kỹ thuật. Tôi thực sự không bao giờ thực hiện bất kỳ thao tác nào trên con trỏ, tôi chỉ muốn biết liệu chúng có trỏ đến cùng một đối tượng hay không.
EDIT: Có vẻ như an toàn nếu tôi có thể đảm bảo rằng các đối tượng p1
và p2
trỏ đến Derrived
đối tượng. Tôi về cơ bản muốn biết nếu nó là an toàn nếu họ không - nếu một hoặc cả hai điểm đến một đối tượng cơ sở, sẽ so sánh nhất thiết phải thất bại? Một lần nữa, tôi có thể đảm bảo các con trỏ hợp lệ (tức là, p1
sẽ không bao giờ trỏ đến một đối tượng Base2
hoặc ngược lại)
Tôi đã có ấn tượng rằng c + + không hỗ trợ đa kế thừa. bạn có nghĩa là "Base1-> Base2-> Derived" –
C++ thực sự hỗ trợ đa thừa kế :) – cwap
Đó là một trong những cách dễ nhất để tự bắn mình vào chân, nhưng có, C++ hỗ trợ MI – Lucretiel