Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 84 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
84
Dung lượng
676,5 KB
Nội dung
OVERLOAD TỐN TỬ VÀ HÀM Khoa Cơng nghệ phần mềm CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 toá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 CuuDuongThanCong.com https://fb.com/tailieudientucntt Operator overload Một toá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 CuuDuongThanCong.com https://fb.com/tailieudientucntt Các toán tử C++ Các loại tốn tử: 09/03/2016 Lập trình hướng đối tượng CuuDuongThanCong.com https://fb.com/tailieudientucntt Các toán tử C++ Một số toán tử đơn dùng làm tốn tử trước tốn tử sau Ví dụ phép tăng (++), phép giảm ( ) Một số tốn tử dùng làm toán tử đơn toán tử đơi: * Tốn tử mục ("[…]") tốn tử đơi Các từ khố "new" "delete" coi tốn tử định nghĩa lại 09/03/2016 Lập trình hướng đối tượng CuuDuongThanCong.com https://fb.com/tailieudientucntt Các tốn tử overload Các tốn tử overload: + ‐ * / % ^ & | ~ ! = < > += ‐= *= /= %= ^= &= |= > >>= [ ] () new delete new[ ] 09/03/2016 delete[ ] Lập trình hướng đối tượng CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 10 Lập trình hướng đối tượng CuuDuongThanCong.com https://fb.com/tailieudientucntt ... https://fb.com/tailieudientucntt Ví dụ - Lớp PhanSo PhanSo Cong(PhanSo b) const; PhanSo operator + (PhanSo b) const; PhanSo operator - () const { return PhanSo(-tu, mau); } bool operator == (PhanSo... https://fb.com/tailieudientucntt Ví dụ - Lớp PhanSo void 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... operator -> đòi hỏi phải định nghĩa hàm thành phần lớp để tốn hạng thứ đối tượng trái (lvalue) Ta phải chủ động định nghĩa phép toán +=, -= , *=,… dù định nghĩa phép gán phép toán + ,-, *,… 09/03/2016