2011-01-19 21 views

Trả lời

38

này là tốt, nhưng nó là rất nhiều IMHO dễ đọc hơn để gọi các cơ sở hạng theo tên:

Base::operator = (rhs); 
+0

thực sự ... chỉ nhận thấy rằng ký hiệu này hoạt động cho các toán tử được chỉ định ngầm định (luôn nghĩ rằng nó chỉ hoạt động đối với những người được xác định rõ ràng) – smerlin

12

Có, đó là an toàn.

Một cú pháp khác nhau để làm điều tương tự có thể là:

Base::operator=(rhs); 
+0

thực sự đây là cách tốt hơn, sau đó cần truyền. Ngoài ra, điều này nên được thực hiện trong các lớp học có nguồn gốc –

1

Đó là tốt hơn để sử dụng

Base::operator=(rhs); 

vì nếu lớp cơ sở của bạn có một phương pháp ảo tinh khiết static_cast không được phép.

class Base { 
    // Attribute 
    public: 
     virtual void f() = 0; 
    protected: 
     Base& operator(const Base&); 
} 

class Derived { 
    public: 
     virtual void f() {}; 
     Derived& operator=(const Derived& src) { 
      Base::operator=(src); // work 
      static_cast<Base&>(*this) = src; // didn't work 
     } 
} 
Các vấn đề liên quan