Tải bản đầy đủ (.pdf) (18 trang)

Bài giảng cơ sở lập trình máy tính chương 5 ths nguyễn thị khiêm hòa

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (399.01 KB, 18 trang )

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


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

2


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

3


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

4



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

5


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

6


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 <Tên_lớp> operatortử> (<Tên_lớp> lhs, <Tên_lớp> rhs)
{

// câu lệnh định nghĩa
}
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM

7


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

8


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

9


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


10


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

11


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

12


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

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


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 <Tên_lớp>))
return false;

else
return this == (<Tên_lớp>) o;
}
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM

15


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ên_lớp>(<Kiểu Dl> <tên tham số>)


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
<Kiểu Dl> (<tên_lớp> <tên tham số>)
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM

16


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

17


Q&A

Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM

18




×