01/10/2018, 09:57
Overloading Operator << and >> in C++
Tại sao khi Nạp chồng toán tử in out lại phải có keyword Friend ở trước nó vậy các tiền bối ?
C
Bài liên quan
Tại sao khi Nạp chồng toán tử in out lại phải có keyword Friend ở trước nó vậy các tiền bối ?
C
Bởi vì cái “nạp chồng toán tử” này nó cần phải truy cập tới phần tử protected hoặc privated của class, ở dây là Phanso. Nên mình phải khai báo hàm này là friend.
Hàm Friend, hay hàm bạn, được phép truy cập vào protected, private của class bạn của nó.
Vậy tại sao ở đây lại k cần dùng hả anh?
Cái đó là phương thức rồi
Lí do thực ra là vì nếu bạn viết theo cách thông thường thì bạn phải truy cập được cài đặt của istream/ostream để sửa code.
operator- là 1 phương thức thành viên của Phanso nên nó được quyền truy cập các thuộc tính protected và private của Phaso.
Khi sử dụng:
a + b;
có thể hiểu là gọi hàm operator- của Phanso a với tham số truyền vào là Phan so b.đối với operator<<, nếu khai báo nó là 1 phương thức thành viên của Phanso thì khi dùng bạn sẽ phải gọi
a << std::cout;
tức là gọi phương thức operator<< của a với tham số truyền vào std::cout (std::cout là 1 đối tượng ostream). như vậy sẽ thiếu tự nhiên về mặt logic và không tiện.vậy nên ta khai báo nó là hàm friend. các hàm friend có quyền truy cập vào các thuộc tính protected và private của Phanso, nhưng chú ý hàm friend KHÔNG PHẢI là phương thức thành viên của Phanso kể cả khi định nghĩa hàm nằm ở trong định nghĩa class.
với hàm friend như trên, khi gọi
std::cout << a;
là gọi hàm có tên là operator<< với std::cout là tham số thứ nhất, và a kiểu Phanso làm tham số thứ 2.để hiểu rõ thêm về hàm friend bạn hãy google lập trình hướng đối tượng trong c++. để hiểu rõ thêm về toán tử << >> thì goolge toán tử chèn luồng trong c++. toàn bộ những kiến thức trên bạn đều có thể hoc được trên mạng, lần sau chịu khó google nhé.
Giải thích chưa đúng, thiếu rõ thế mà cũng dạy khóa học trên udemy. À mà các khóa đó đang bị bỏ con giữa chợ lừa tiền