1. Trang chủ
  2. » Công Nghệ Thông Tin

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

18 132 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 18
Dung lượng 399,01 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

 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... Đặt vấn đề

Trang 1

Chương 5:

Nạp chồng toán tử

Gi ả ng viên: Ths Nguyễn Thị Khiêm Hòa

Trang 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

Trang 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

Trang 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();

Trang 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);

}

Trang 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

Trang 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 <Tên_lớp> operator<toán

tử> (<Tên_lớp> lhs, <Tên_lớp> rhs) {

// câu lệnh định nghĩa

Trang 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);

Trang 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

Trang 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

Trang 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

Trang 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

Trang 13

Nguyên tắc sử dụng toán tử

Trang 14

Nguyên tắc sử dụng toán tử

Trang 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 <Tên_l ớ p>))

return false;

else

return this == (<Tên_l ớ p>) o;

Trang 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ê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:

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

}

Trang 18

Q&A

Ngày đăng: 04/12/2015, 14:17

🧩 Sản phẩm bạn có thể quan tâm

w