ngÔn ngỮ lẬp trÌnh nạp chồng toán...
TRANSCRIPT
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ử
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
Tại sao phải
nạp chồng toán tử?
Xét 2 ví dụ sau
16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 4
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
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
Nạp chồng ngoài lớp
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
Xét ví dụ
16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 9
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
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
Ví dụ cho giải pháp 1
16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 12
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
Ví dụ cho giải pháp 2
16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 14
Nạp chồng trong lớp
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 +, -, *, /, %
Ví dụ
16/04/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 17
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
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
Nạp chồng toán tử
nhập (>>), xuất(<<)
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:
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
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