Ví dụ, tôi có một số hệ thống phân cấp lớp (có thể, với tất cả các loại thừa kế - công cộng, tư nhân, cộng đồng ảo, đa thừa kế, vv):Khi nào tôi có thể so sánh con trỏ với cùng một đối tượng trong C++?
class A {
int a;
public:
virtual ~A() {}
};
class B: public A { int b; };
class C: public virtual B { int c; };
class E: public virtual B { int e; };
class F: public C, public E { int f; };
Sử dụng dàn diễn viên tôi nhận được gợi ý cho mọi phụ đối tượng của đối tượng chính "lớn":
F * f = new F;
E * e = f;
C * c = f;
B * b = f;
A * a = f;
Tôi có thể so sánh điểm nào của con trỏ này cho bình đẳng (operator ==) và tại sao? Liệu việc so sánh có sử dụng logic-logic hay một số kỹ thuật khác?
Các tình huống có thể xảy ra là gì, khi tôi không thể so sánh con trỏ với cùng một đối tượng phức tạp? Loại vật thể nào có thể là?
Tôi mong đợi, rằng tất cả các con trỏ đến cùng một đối tượng luôn bằng nhau.
* Tại sao bạn muốn so sánh chúng, đó là câu hỏi . – Jon
Con trỏ chỉ đơn thuần là địa chỉ, Nếu et tất cả những gì bạn muốn so sánh bất cứ thứ gì nó có thể là đối tượng được trỏ bởi con trỏ, Bạn không thể so sánh hai địa chỉ và cho biết các đối tượng ở các vị trí đó có bằng nhau hay không. .. nhưng điều đó thật sai. –
@Als: Nếu tôi làm 'std :: cout << (e == b) <<" "<< e <<" "<< b << std :: endl;', nó in '1 0x1aaa020 0x1aaa030' . Vì vậy, các địa chỉ khác nhau, nhưng con trỏ là như nhau. Toàn bộ câu hỏi là về các quy tắc chung C++ của loại so sánh đó. –