Cho em hỏi tại sao toán tử gán phải là member function. Nếu mình dùng hàm friend hoặc non-member function cũng logic mà.

Member function in C++
Vì nó làm thay đổi giá trị của toán hạng trái.
Nếu toán tử 2 ngôi (binary operator) không làm thay đổi giá trị của 2 toán hạng thì dùng friend function.
Nếu toán tử 2 ngôi làm thay đổi toán hạng trái thì dùng member function
Toán tử 1 ngôi (unary operator) luôn là member fucntion
Các toán tử sau đây luôn dùng member function
=, [], *, ->, ->*
Bạn khai báo operator sai rồi kìa
Fraction& operator= (const Fraction &fraction);
friend Fraction operator+ (const Fraction &lhs, const Fraction &rhs);
friend Fraction operator- (const Fraction &lhs, const Fraction &rhs);
friend Fraction operator* (const Fraction &fraction, int number);
friend Fraction operator* (int number, const Fraction &fraction);
nếu xài friend hay non-member thì xài object làm gì nữa, cứ C struct mà táng cho lành
thay vì viết student.setName(...) cứ viết là setName(&student, ...) rồi lấy trình dịch C mà biên dịch, bỏ C++ đi vậy, cũng logic mà 
cám ơn các bạn. mình hiểu rồi ạ :))
Vậy tại sao toán tử >> (input) dạng friend mà vẫn làm thay đổi đc toán hạng đấy thôi?
Phương thức cài sẵn không có friend đâu
mà do các thành phần của kiểu đều phải bắt nguồn từ kiểu cơ bản nên cứ việc sử dụng 
Mình xem lại rồi.
Operator >> với toán hạng trái là istream thì dùng friend function.
Quy tắc mình chép lại là bộ convention nên tuân thủ khi code C++. Chọn member hay non- member đều được
Thanks bạn đã góp ý
mình ko hiểu ý bạn lắm?
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?