[OOP] Chọn lựa phương thức nạp chồng toán tử.

Trong bài viết về các dạng nạp chồng toán tử, chúng ta đã biết để nạp chồng 1 toán tử chúng ta có thể dùng member function, friend function hay nomal function.

Tuy nhiên không phải toán tử nào ta cũng có thể sử dụng được cả 3 dạng trên. Trong bài viết này chúng ta sẽ cùng tìm hiểu xem với mỗi loại toán tử thì nạp chồng sử dụng phương thức nào là tốt nhất.

Những toán tử sau bắt buộc khi nạp chồng phải sử dụng member function

Toán tử gán (=)

Toán tử index ([])

Toán tử Function call (())

Toán tử member selection (->)

Không phải toán tử nào cũng có thể nạp chồng sử dụng member function

Như đã biết khi nạp chồng toán tử sử dụng member function thì toán hạng bên trái luôn là tham số ẩn (con trỏ this) nên các toán hạng bên trái phải có kiểu dữ liệu của class.

Với các toán tử có toán hạng bên trái có kiểu dữ liệu khác với kiểu dữ liệu của class ta dùng hàm bạn đế nạp chồng.

Ví dụ:

Toán tử << (friend std::ostream& operator<< (std::ostream &out, object)) 

Toán tử >> (friend std::istream& operator>> (std::istream &in, object)) 

Toán tử + : (int + object)

Ở trên ta đã phân tích các toán tử dùng với 1 phương thức xác định. Tuy nhiên với các toán tử có thể sử dụng cả 3 phương thức thì lựa chọn cái nào là tốt nhất.

Dưới đây là các lựa chọn phương thức nạp chồng cho các toán tử.

  • Với các toán tử 1 ngôi ta sử dụng member function
  • Với các toán tử làm thay đổi giá trị toán hạng bên trái ta dùng member function (+=)
  • Với các toán tử không làm thay đổi toán hạng bên trái ta dùng friend function, nomal function (+, -…)

Was this article helpful?

Leave A Comment?