ngÔn ngỮ lẬp trÌnh nạp chồng toán...

23
16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 1 NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tử

Upload: others

Post on 07-Feb-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 1

NGÔN NGỮ LẬP TRÌNH

Nạp chồng toán tử

Page 2: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

NỘI DUNG

• Tại sao phải nạp chồng toán tử?

• Các cách nạp chồng toán tử

• Nạp chồng các toán tử <<, >>

16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 2

Page 3: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

Tại sao phải

nạp chồng toán tử?

Page 4: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

Xét 2 ví dụ sau

16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 4

Page 5: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

Kết luận

+, -, *, /, %,

Là những toán tử đã được xây dựng sẵn

Được dùng cho các kiểu cơ bản trong C/C++

Nhưng chưa dùng được cho các kiểu người dùng

định nghĩa

=> Muốn dùng thì phải nạp chồng

16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 5

Page 6: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

Các cách nạp chồng toán tử

Nạp chồng ngoài lớp

Hàm nạp chồng không phải là hàm thành viên của

lớp

Nạp chồng trong lớp

Hàm nạp chồng là hàm thành viên của lớp

Page 7: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

Nạp chồng ngoài lớp

Page 8: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

Nạp chồng ngoài lớp

Cú pháp nạp chồng toán tử 1 ngôi: kieutrave operator toántử(kieutoanhang toanhang)

Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang toanhang1, kieutoanhang toanhang2)

Trong đó: operator: là từ khóa nạp chồng toán tử

Toántử: là các ký hiệu +, -, *, /, %

16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 8

Page 9: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

Xét ví dụ

16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 9

Page 10: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

Vấn đề

Trong hàm nạp chồng sử dụng đến các thành

phần private của đối tượng

Hàm nạp chồng không thuộc lớp => không

truy cập vào các thành phần private được

16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 10

Page 11: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

Giải pháp 1

Phải truy cập qua các hàm thành viên của lớp

16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 11

Page 12: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

Ví dụ cho giải pháp 1

16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 12

Page 13: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

Giải pháp 2

Sử dụng hàm bạn

Hàm bạn là hàm có thể truy cập được vào các

thành phần private của lớp

Phải khai báo hàm bạn trong lớp

Phải có từ khóa friend ở đầu khai báo hàm

16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 13

Page 14: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

Ví dụ cho giải pháp 2

16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 14

Page 15: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

Nạp chồng trong lớp

Page 16: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

Nạp chồng trong lớp

Cú pháp nạp chồng toán tử 1 ngôi:

kieutrave operator toántử()

Cú pháp nạp chồng toán tử 2 ngôi:

kieutrave operator toántử(kieutoanhang toanhang)

Trong đó:

operator: là từ khóa nạp chồng toán tử

Toántử: là các ký hiệu +, -, *, /, %

Page 17: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

Ví dụ

16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 17

Page 18: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

Sự khác biệt giữa 2 cách nạp chồng

Nạp chồng trong lớp có:

Số lượng tham số của hàm ít hơn

Vì khi nạp chồng trong lớp, toán hạng 1 được hiểu

chính là đối tượng gọi hàm

16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 18

Page 19: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

Bài tập Xây dựng một lớp phân số (đặt tên là PhanSo) bao gồm:

Các thành phần dữ liệu tử số và mẫu số

Ít nhất hai hàm tạo: hàm tạo mặc định và hàm tạo có tham số

Phương thức nhập và hiển thị dữ liệu cho phân số

Xây dựng phương thức nạp chồng toán tử +, - , *, /

Viết một hàm main, khai báo và nhập dữ liệu cho 3 phân số ps1, ps2, ps3. Tính toán và hiển thị các kết quả sau: ps4 = ps1 + ps2 - ps3

ps4 = ps1 * ps2 / ps3

ps4 = (ps1+1) + ps2/2 – ps3

16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 19

Page 20: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

Nạp chồng toán tử

nhập (>>), xuất(<<)

Page 21: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

Mục đích

16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 21

Thay vì phải viết:

Ta có thể viết:

Page 22: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

Cách làm

Khai báo nạp chồng toán tử << và >> là hàm

bạn trong lớp PhanSo:

16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 22

Page 23: NGÔN NGỮ LẬP TRÌNH Nạp chồng toán tửfit.hnue.edu.vn/~dungntp/NNLT/7.Napchongtoantu.pdf · Cú pháp nạp chồng toán tử 2 ngôi: kieutrave operator toántử(kieutoanhang

Cách làm

Định nghĩa

2 hàm này

như sau:

16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 23