Chương 5: Nạp chồng toán tử

 Từ khóa Operator  Hỗ trợ ngôn ngữ .NET khác  Toán tử so sánh bằng  Toán tử chuyển đổi

pdf18 trang | Chia sẻ: lylyngoc | Lượt xem: 1505 | Lượt tải: 2download
Bạn đang xem nội dung tài liệu Chương 5: Nạp chồng toán tử, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM Chương 5: Nạp chồng toán tử Giảng viên: Ths. Nguyễn Thị Khiêm Hòa Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 2 Nội dung  Từ khóa Operator  Hỗ trợ ngôn ngữ .NET khác  Toán tử so sánh bằng  Toán tử chuyển đổi Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 3 Đặt vấn đề  Lớp do người dùng định nghĩa (user class defined) có đầy đủ chức năng của các lớp được xây dựng sẵn.  Ví dụ:Thực hiện phép cộng hai phân số, đảm bảo thực hiện được các phép toán số học trên lớp đối tượng này, đồng thời có thể viết toán tử “+” như các phép tính số học khác Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 4 Đặt vấn đề class Phanso { private int tuso; private int mauso; public Phanso(int tu, int mau) { this.tuso = tu; this.mauso = mau; } public override string ToString() { return tuso.ToString() + “/” + mauso.ToString(); } } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 5 Đặt vấn đề public Phanso Cong(Phanso rhs) { if(rhs.mauso!= mauso) { int ts = mauso*rhs.tuso + rhs.mauso*tuso; int ms = mauso*rhs.mauso; return new Phanso(ts,ms); } else { int ts = tuso + rhs.tuso; return new Phanso(ts, this.mauso); } } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 6 Đặt vấn đề  Lời gọi phương thức: Phanso kq = ps1.Cong(ps2);  Đảm bảo thực hiện phép cộng hai phân số  Không tự nhiên. Cần xây dựng định nghĩa các phép toán thật tự nhiên Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 7 Toán tử Operator  Toán tử là phương thức tĩnh  Trả về kết quả thực hiện phép tính trên đối tượng  Để xây dựng toán tử thực hiện nạp chồng toán tử  Cú pháp public static operator<toán tử> ( lhs, rhs) { // câu lệnh định nghĩa } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 8 Toán tử operator public static Phanso operator+(Phanso lhs, Phanso rhs) { if(rhs.mauso!= lhs.mauso) { int ts = lhs.mauso*rhs.tuso + rhs.mauso*lhs.tuso; int ms = lhs.mauso*rhs.mauso; return new Phanso(ts,ms); } else { int ts = lhs.tuso + rhs.tuso; return new Phanso(ts, this.mauso); } } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 9 Hỗ trợ ngôn ngữ .NET  Một số ngôn ngữ không hỗ trợ nạp chồng toán tử => cần hỗ trợ phương thức thay thế.  Ví dụ: Định nghĩa phương thức Add để thực hiện phép cộng hai đối tượng Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 10 Sử dụng toán tử  Không sử dụng nạp chồng toán tử tùy tiện:  Nạp chồng toán tử làm cho đối tượng trực quan  Có thể làm mã nguồn phức tạp nhập nhằng. Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 11 Nguyên tắc sử dụng toán tử  Định nghĩa toán tử trong kiểu dữ liệu giá trị, kiểu dữ liệu được xây dựng sẵn  Nạp chồng toán tử bên trong lớp  Sử dụng tên và ký hiệu được quy ước trong CLS  Kết quả phải rõ ràng  Toán tử có tính đối xứng Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 12 Nguyên tắc sử dụng toán tử  Cung cấp phương thức thay thế theo quy định trong CLS Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 13 Nguyên tắc sử dụng toán tử Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 14 Nguyên tắc sử dụng toán tử Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 15 Toán tử so sánh bằng  Toán tử so sánh “==“  Định nghĩa lại phương thức ảo Equals() theo cú pháp: public override bool Equals(object o) { if(!(o is )) return false; else return this == () o; } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 16 Toán tử chuyển đổi  Xây dựng phương thức chuyển đổi kiểu dữ liệu:  Ngầm định (implicit): Bảo đảm không mất thông tin Cú pháp: public static implicit operator ( )  Tường minh (explicit): Chuyển đổi công khai, có khả năng gây mất thông tin Cú pháp: public static explicit operator ( ) Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 17 Toán tử chuyển đổi public static implicit operator Phanso(int a) { return new Phanso(a,1); } public static explicit operator int(Phanso ps) { return ps.tuso/ps.mauso; } Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM 18 Q&A
Tài liệu liên quan