Nạp chồng toán tử đơn nguyên
Các toán tử đơn nguyên chỉ sử dụng cho 1 toán hạng, chúng ta hay gặp nhất là ++, –, + (positive), - (negative). Vì chỉ cần 1 toán hạng chúng thường sẽ là các phương thức (hàm thành phần - member function) cùng xem cách cài đặt chúng với mình nhé!
Lớp PhanSo
Để làm ví dụ cho các toán tử đơn nguyên, mình sẽ cài đặt lớp PhanSo như sau:
OK Tiến hành nào!
Nạp chồng toán tử ++, --
Tư tưởng của 2 loại toán tử này lần lượt là tăng và giảm giá trị đi 1 đơn vị, đối với lớp PhanSo chúng ta sẽ +1 và -1. Ví dụ:
Nhận xét: phân số +1 thực chất là (tử số + mẫu số) / mẫu số. Một điểm lưu ý nữa toán tử ++
(và --
) đứng trước và sau toán hạn đều có ý nghĩa khác nhau, các bạn xem bảng so sánh bên dưới nhé:
Toán tử | Ý nghĩa |
---|---|
temp = ++ps | Tăng ps lên 1 đơn vị trước rồi gán giá trị mới cho temp |
temp = ps++ | Gán giá trị ps cho temp rồi mới tăng ps lên 1 đơn vị |
Chúng ta sẽ cài đặt như sau:
Mình sẽ giải thích thêm như sau:
- Đầu tiên là tham số của 2 hàm: đây chỉ là tham số giả để trình biên dịch phân biệt 2 hàm thôi.
- Đối với ++ps: Trước tiên chúng ta sẽ tăng đơn vị theo cách tính mình đã trình bày ở phần nhận xét bằng hàm tăng đơn vị (TangDonVi), sau đó trả về *this (implicit object) để có thể tham gia vào các toán tử khác (vd: ++ps + 2).
- Đối với ps++: Cũng trả về *this, nhưng lúc này ps chưa tăng giá trị vì chúng ta gán ở biến temp trước khi gọi hàm TangDonVi hàm trả về temp(tức là đang có giá trị cũ) để tham gia thực hiện cùng các toán tử khác.
Các bạn hãy suy ngẫm, mình tin bạn sẽ sớm hiểu được thôi ;) Các bạn làm tương tự với toán tử --
nhé.
Nạp chồng toán tử !
Toán tử !
được sử dụng để phủ định, nó sẽ trả về giá trị là true
hoặc false
. Mình sẽ kiểm tra 1 phân số có phải là phân số tối giản hay không dùng toán tử !
nhé.
Các bạn xem và hiểu được cách mình thực hiện là chính thôi chứ thực chất công dụng mình đang sử dụng là sai so với công dụng của toán tử ! ban đầu.
Tổng kết
Vậy là chúng ta đã biết thêm cách nạp chồng toán tử đơn nguyên, các bạn luyện tập thêm để nhớ cách sử dụng nhé. Có thắc mắc bạn bình luận bên dưới để tụi mình giải đáp nhé. Pie~