Hướng dẫn operator overloading in c++ - nạp chồng toán tử trong C++
Nạp chồng toán tử trong C++ là các hàm có tên đặc biệt. Tên hàm gồm từ khóa operator và theo sau là ký hiệu của toán tử đang được định nghĩa. trong C++ là các hàm có tên đặc biệt. Tên hàm gồm từ khóa operator và theo sau là ký hiệu của toán tử đang được định nghĩa. Nạp chồng toán tử được dùng để định nghĩa lại các toán tử có sẵn như ++, – -, +, -, *, /,… cho kiểu dữ liệu (class) do người lập trình tự định nghĩa. Nhằm tạo ra toán tử cùng tên nhưng thực hiện trên các lớp khác nhau chứ không phải trên các kiểu dữ liệu nguyên thủy. Để dễ hiểu, các bạn xem ví dụ cộng (+) 2 đối tượng phân số bên dưới. Khi cộng (+) sẽ bị lỗi, bởi vì chưa có định nghĩa toán tử cộng (+) cho đối tượng phân số.cộng (+) 2 đối tượng phân số bên dưới. Khi cộng (+) sẽ bị lỗi, bởi vì chưa có định nghĩa toán tử cộng (+) cho đối tượng phân số.
Kết quả lỗi
Lưu ý: Ví dụ có khai báo int x=0, y=1; int tong = x + y; không bị lỗi bởi C++ đã định nghĩa sẵn toán tử cộng (+) cho các biến kiểu int rồi. Ví dụ có khai báo int x=0, y=1; int tong = x + y; không bị lỗi bởi C++ đã định nghĩa sẵn toán tử cộng (+) cho các biến kiểu int rồi. Cú pháp định nghĩa một toán tử nạp chồng:
Trong đó:– Kiểu_trả_về là kiểu dữ liệu của hàm nạp chồng toán tử. – là tên toán tử cần nạp chồng (+, -, *, /,…) – operator operator Ví dụ:
Nếu hàm nạp chồng toán tử là hàm bạn (friend function) thì có một đối số cho toán tử một ngôi và hai đối số cho toán tử hai ngôi.hàm bạn (friend function) thì có một đối số cho toán tử một ngôi và hai đối số cho toán tử hai ngôi.
Toán tử một ngôi là toán tử chỉ có một toán hạng. Ví dụ: x++, toán tử ++ chỉ có một toán hạng là x. Toán tử hai ngôi là toán tử có hai toán hạng. Ví dụ: a + b, toán tử + phải có đủ 2 số a và b thì mới cộng (+) được. Trong C++, ta có thể nạp chồng cho hầu hết các toán tử:
!=
– –Không thể thay đổi các toán tử đã định nghĩa trước trong C++. Ví dụ, không thể định nghĩa lại các phép toán +, -, *, /,… đối với các số kiểu int, float. ->*,
->
[]()
->
[]
Toán tử lấy kiểu dữ liệu (‘typeid’) |