Có rất nhiều mã để giải thích trên internet (cũng đặc biệt ở đây, trên stackoverflow) trả về *this
.Tại sao một số phương thức lớp trả về "* this" (tham chiếu đối tượng của tự)?
Ví dụ từ bài Copy constructor and = operator overload in C++: is a common function possible?:
MyClass& MyClass::operator=(const MyClass& other)
{
MyClass tmp(other);
swap(tmp);
return *this;
}
Khi tôi viết trao đổi như sau:
void MyClass::swap(MyClass &tmp)
{
// some code modifying *this i.e. copying some array of tmp into array of *this
}
Không phải là đủ giá trị trả về thiết lập của operator =
-void
và tránh trở *this
?
Bạn nghĩ rằng các phép gán chuỗi như 'a = b = c' hoạt động như thế nào? –
hành vi "bình thường" của 'toán tử =' là trả về tham chiếu đến kết quả của phép toán. Bạn có thể định nghĩa nó là vô hiệu nhưng nó hoạt động khác với mọi mong đợi của người dùng. Bạn đơn giản không thể viết một cái gì đó như '(x = y) ++' hoặc bất kỳ đánh giá nào khác sử dụng giá trị kết quả. Điều quan trọng là bạn trả lại tham chiếu đến đối tượng không chỉ giá trị. Nếu bạn chỉ trả về giá trị, thuật ngữ trên sẽ biên dịch nhưng kết quả là sai! – Klaus
Điều này được gọi là [Phương pháp Chaining] (https://en.wikipedia.org/wiki/Method_chaining#C.2B.2B). Liên quan: ['Trở lại * cái này' có nghĩa là gì trong C++?] (Http://stackoverflow.com/q/18162522/514235). – iammilind