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
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 
            
        
        
    
                    