Member function in C++

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à.

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);
3 Likes

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à :kissing_smiling_eyes:

2 Likes

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?

1 Like

Phương thức cài sẵn không có friend đâu :slight_smile: 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 :slight_smile:

1 Like

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?