OVERLOAD TOÁN TỬ VÀ HÀM Khoa Công nghệ phần mềm Nội dung Giới thiệu Các toán tử của C++ Các toán tử overload được Cú pháp Operator Overloading Chuyển kiểu Sự nhập nhằng Phép toán [.]
OVERLOAD TỐN TỬ VÀ HÀM Khoa Cơng nghệ phần mềm Nội dung Giới thiệu Các toán tử C++ Các toán tử overload Cú pháp Operator Overloading Chuyển kiểu Sự nhập nhằng Phép toán > Phép toán lấy phần tử mảng: [ ] Phép toán gọi hàm: () Phép toán tăng giảm: ++ -09/03/2016 Lập trình hướng đối tượng Giới thiệu Xét ví dụ sau: Giả sử có lớp PhanSo cung cấp thao tác Set, Cong, Tru, Nhan, Chia PhanSo A, B, C, D, E; C.Set(A.Cong(B)); E.Set(D.Cong(C)); E = A + B + D ??? 09/03/2016 Lập trình hướng đối tượng Giới thiệu Các toán tử cho phép ta sử dụng cú pháp toán học kiểu liệu C++ thay gọi hàm (bản chất gọi hàm) Ví dụ thay a.set(b.cong(c)); a = b + c; Gần với kiểu trình bày mà người quen dùng (mang tính tự nhiên) Đơn giản hóa mã chương trình PhanSo A, B; cin>>A; //A.Nhap(); cin>>B; //B.Nhap(); 09/03/2016 Lập trình hướng đối tượng Giới thiệu Một lớp liệu phương thức cịn có phép tốn giúp người lập trình dễ dàng thể câu lệnh chương trình Tuy nhiên, cài đặt phép toán cho phép tạo phép toán sở ký hiệu phép tốn có, khơng quyền cài đặt phép tốn sự cài đặt thêm phép toán nạp chồng phép toán (operator overloading) Đối với kiểu liệu người dùng: C++ cho phép định nghĩa toán tử kiểu liệu người dùng overload 09/03/2016 Lập trình hướng đối tượng Operator overload Một tốn tử dùng cho nhiều kiểu liệu Như vậy, ta tạo kiểu liệu đóng gói hồn chỉnh (fully encapsulated) để kết hợp với ngơn ngữ kiểu liệu cài sẵn Ví dụ: SoPhuc z(1,3), z1(2,3.4), z2(5.1,4); z = z1 + z2; z = z1 + z2*z1 + SoPhuc(3,1); 09/03/2016 Lập trình hướng đối tượng Các toán tử C++ Các loại toán tử: 09/03/2016 Lập trình hướng đối tượng Các tốn tử C++ Một số tốn tử đơn dùng làm toán tử trước toán tử sau Ví dụ phép tăng (++), phép giảm ( ) Một số tốn tử dùng làm tốn tử đơn tốn tử đơi: * Tốn tử mục ("[…]") tốn tử đơi Các từ khố "new" "delete" coi toán tử định nghĩa lại 09/03/2016 Lập trình hướng đối tượng Các toán tử overload Các toán tử overload: + ‐ * / % ^ & | ~ ! = < > += ‐= *= /= %= ^= &= |= > >>= [ ] () new delete new[ ] 09/03/2016 delete[ ] Lập trình hướng đối tượng Cú pháp Operator Overloading Sử dụng tên hàm “operator@” cho tốn tử “@” Ví dụ: operator+ Số lượng tham số khai báo hàm phụ thuộc hai yếu tố: Toán tử toán tử đơn hay đơi Tốn tử khai báo phương thức toàn cục hay phương thức lớp 2/3 + – 6/5 = ? 09/03/2016 Lập trình hướng đối tượng 10 ... return PhanSo (tu* b.mau + mau*b .tu, mau*b.mau); } PhanSo PhanSo::operator + (PhanSo b) const { return PhanSo (tu* b.mau + mau*b .tu, mau*b.mau); } bool PhanSo::operator == (PhanSo b) const { return... PhanSo::UocLuoc(){ long usc = USCLN (tu, mau); tu /= usc; mau /= usc; if (mau < 0) mau = -mau, tu = -tu; if (tu == 0) mau = 1; } void PhanSo::Set(long t, long m) { if (m) { tu = t; mau = m; UocLuoc();... b) const { return tu* b.mau == mau*b .tu; } void PhanSo::Xuat() const { cout