Một toán tử có thể dùng cho nhiều loại kiểu dữ liệu Các toán tử được chia thành hai loại
Toán tử một ngôi: chỉ có một toán hạng Toán tử hai ngôi: có hai toán hạng
Toán tử một ngôi lại chia thành hai loại Tiền tố: toán tử đặt trước toán hạng Hậu tố: toán tử đặt sau toán hạng
#48
#49
Đa năng hoá toán tử
Cú pháp:
type_name operator operator_symbol
( parameters_list ) {
………} }
Từ khóa operator khai báo một hàm chỉ rõ ý nghĩa của toán tử operator_symbol.
#50
Đa năng hoá toán tử
Số lượng tham số của hàm chính là số ngôi của toán tử
Các toán tử được đa năng hóa sẽ được lựa chọn bởi TBD cũng theo cách thức tương tự như việc chọn lựa giữa các hàm được đa năng hóa
#51
Đa năng hoá toán tử
struct Complex {
float r, i; };
………
Complex operator + (Complex c1, Complex c2) {
Complex tmp;
tmp.r = c1.r + c2.r; tmp.i = c1.i + c2.i; return tmp; } Complex c1, c2, c; ……… c = c1 + c2; c = operator + (c1, c2);
#52
Đa năng hoá toán tử
Không thể định nghĩa toán tử mới
Phần lớn các toán tử được đa năng hóa Ngoại trừ các toán tử
. .* :: ?: typeid sizeof const_cast
#53
Đa năng hoá toán tử
Không thể đa năng hóa ký hiệu tiền xử lý
Không thể thay đổi độ ưu tiên của toán tử hay số các toán hạng của nó
Không thể thay đổi ý nghĩa của toán tử khi áp dụng các kiểu cài sẵn
Trong hàm định nghĩa toán tử không có các tham số có giá trị mặc định
#54
Đa năng hoá toán tử
+ - * / % | & ^
~ >> << = += -= *= /=
%= |= &= ^= >>= <<= > <
>= <= == != && || ! ++
-- gọi hàm() [] new delete thành -> viên ->* thành viên con trỏ , & địa chỉ con trỏ* + dấu dương - dấu âm ( type_name ) type_name ( … ) Toán tử chuyển kiểu
#55
Template
Được sử dụng khi có những đoạn mã tương đồng về công việc nào đó
VD: hàm tìm giá trị lớn nhất của hai số nguyên
Hàm này chỉ sử dụng cho 2 số nguyên, đối với số thực viết lại hàm có sự thay đổi về kiểu dữ liệu
int Max(int a, int b) {
return (a>b) ? a : b; }
#56
Template
Template để giải quyết vấn đề xử lý có tính chất tổng quát (genetic) với kiểu dữ liệu chưa xác định Dựa vào template có thể tạo các công việc cụ thể (thực thể) theo một cách nào đó
Gồm 2 loại
Hàm template Lớp template
#57