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