Tài liệu Ngôn ngữ lập trình - Nạp chồng toán tử, hàm bạn - Nguyễn Xuân Hùng: Giảng viên: Nguyễn Xuân Hùng
Mobile: 0908 386 366
Email: nguyenxuanhung@wru.vn
Nạp chồng toán tử, hàm bạn
NGÔN NGỮ LẬP TRÌNH
Nguyễn Xuân Hùng – Khoa CNTT – Trường Đại học Thủy Lợi
NỘI DUNG
1. Nạp chồng toán tử
2. Hàm bạn
3. Lớp bạn
12/18/20142 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
MỤC TIÊU
1. Căn bản về nạp chồng toán tử: nạp
chồng dưới hàm thành viên
2. Từ khóa friend và chuyển đổi kiểu tự
động
Hàm friend, lớp friend
Hàm kiến tạo và chuyển kiểu tự động
3. Tham chiếu và nạp chồng: toán tử >>
và >>, =, [], ++, --
12/18/20143 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1 Nạp chồng
Các toán tử chẳng hạn +, -, %, ==, vv... chẳng qua chỉ là
các hàm được sử dụng với cú pháp hơi khác một chút. Chúng
ta viết x + 7 chứ không phải là +(x, 7). Thế nhưng toán tử + là
một hàm có hai đối số (hai toán hạng) và trả lại một giá trị đơn.
Như vậy các toán tử là không thực sự cần thiết. Chúng ta có
thể viết +(x, 7) hoặc add(x,7).
“+” là tên hàm
X, 7 ...
22 trang |
Chia sẻ: putihuynh11 | Lượt xem: 492 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Ngôn ngữ lập trình - Nạp chồng toán tử, hàm bạn - Nguyễn Xuân Hùng, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Giảng viên: Nguyễn Xuân Hùng
Mobile: 0908 386 366
Email: nguyenxuanhung@wru.vn
Nạp chồng toán tử, hàm bạn
NGÔN NGỮ LẬP TRÌNH
Nguyễn Xuân Hùng – Khoa CNTT – Trường Đại học Thủy Lợi
NỘI DUNG
1. Nạp chồng toán tử
2. Hàm bạn
3. Lớp bạn
12/18/20142 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
MỤC TIÊU
1. Căn bản về nạp chồng toán tử: nạp
chồng dưới hàm thành viên
2. Từ khóa friend và chuyển đổi kiểu tự
động
Hàm friend, lớp friend
Hàm kiến tạo và chuyển kiểu tự động
3. Tham chiếu và nạp chồng: toán tử >>
và >>, =, [], ++, --
12/18/20143 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1 Nạp chồng
Các toán tử chẳng hạn +, -, %, ==, vv... chẳng qua chỉ là
các hàm được sử dụng với cú pháp hơi khác một chút. Chúng
ta viết x + 7 chứ không phải là +(x, 7). Thế nhưng toán tử + là
một hàm có hai đối số (hai toán hạng) và trả lại một giá trị đơn.
Như vậy các toán tử là không thực sự cần thiết. Chúng ta có
thể viết +(x, 7) hoặc add(x,7).
“+” là tên hàm
X, 7 là đối số
Hàm “+” trả về “tổng” của các đối số.
Đây chính là nạp chồng toán tử
12/18/20144 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1 Nạp chồng
Qui tắc nạp chồng toán tử
Khi nạp chồng một toán tử thì phải có ít nhất một tham số
(một toán hạng) của toán tử được nạp chồng có kiểu lớp
Hầu hết các toán tử đều có thể được nạp chồng dưới dạng
hàm thông thường, hàm thành viên của lớp, hoặc hàm bạn
của lớp.
Các toán tử sau đây chỉ có thể được nạp chồng dưới dạng
thành viên (không tĩnh) của lớp: =, [], -> và ( ).
Bạn không thể tạo ra một toán tử mới. Tất cả những gì bạn có
thể làm đó là nạp chồng các toán tử đã có sẵn chẳng hạn: +, -
, *, /, %, vv
12/18/20145 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1 Nạp chồng
Qui tắc nạp chồng toán tử
Bạn không thể thay đổi số lượng đối số mà một toán tử nhận. Ví dụ, bạn
không thể thay đổi toán tử % từ toán tử hai ngôi trở thành toán tử một ngôi khi
bạn nạp chồng nó. Bạn không thể thay đổi toán tử ++ từ một ngôi trở thành
hai ngôi khi bạn nạp chồng nó.
Bạn không thể thay đổi độ ưu tiên của các toán tử. Một toán tử được nạp
chồng có độ ưu tiên không thay đổi. Ví dụ x * y + z luôn có nghĩa là (x * y) + z
mặc cho x, y, và z là các đối tượng và toán tử *, + đã được nạp chồng cho các
lớp phù hợp.
Các toán tử sau không thể bị nạp chồng: Toán tử dấu chấm (.), toán tử phân
giải phạm vi (::), sizeof, ?:, và toán tử .* (toán tử này không được đề cập đến
trong quyển sách này)
Một toán tử được nạp chồng không thể có đối số mặc định.
12/18/20146 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1 Nạp chồng
Các toán tử hai ngôi có sẵn:
Ví dụ: +, -, =, %, ==, /, *
Đã làm việc nhiều với các kiểu có sẵn của C++
Tại sao phải nạp chồng:
Phù hợp với nhu cầu của chúng ta
Theo ký hiệu chúng ta thường sử dụng
Ví dụ: Cộng các biến Money, biến Distance
12/18/20147 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1 Nạp chồng
Cú pháp bằng hàm thông thường:
Ý nghĩa:
Nạp chồng phép + cho 2 toán hạng kiểu Money
Sử dụng tham số tham chiếu hằng cho hiệu quả
Giá trị trả về có kiểu Money
12/18/20148 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
Giá trị
trả về
Từ khóa
để nạp
chồng
Toán tử
để nạp
chồng
Tham số để nạp chồng
Bổ từ
1 Nạp chồng
Định nghĩa phép “+” cho lớp Money
12/18/20149 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1 Nạp chồng
Nạp chồng các toán tử so sánh: >, =, <=, ==, !=. Cho
phép so sánh các đối tượng Money
Ví dụ nạp chồng toán tử ==.
Hàm trả về kiểu bool cho đẳng thức true/false
Định nghĩa cho toán tử == của lớp Money
12/18/201410 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1 Nạp chồng
Hàm tạo trả về đối tượng:
Hàm tạo là hàm kiểu void?
• Ta nghĩ vậy nhưng không phải vậy
• Nó là một hàm đặc biệt
• Có thể trả về một giá trị!
Trong câu lệnh nạp chồng toán tử “+” có câu lệnh:
Trả về lời gọi tới lớp Money
Hàm tạo thực ra có trả về một đối tượng, gọi là đối tượng
vô danh.
12/18/201411 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1 Nạp chồng
Trả về giá trị const
Xem xét lại việc nạp chồng toán tử “+”:
Trả về một đối tượng hằng?
Vì sao?
Để hiểu được lý do này, hãy xem xét ảnh hưởng của
vệc trả về đối tượng không chỉ định là const
Xét biểu thức gọi tới nó: (m1 + m2)
m1, m2 là đối tượng kiểu Money
Đối tượng trả về có kiểu Money
Ta có thể thao tác trên đối tượng trả về
12/18/201412 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1 Nạp chồng
Trả về giá trị const
Ta có thể gọi các hàm thành viên trên đối tượng trả về
bởi biểu thức m1+m2:
(m1+m2).output(); Hợp lệ: không làm biến đổi giá trị
vừa trả về
(m1+m2).input(); Vẫn hợp lệ: nhưng nó có thể làm biến
đổi giá trị trả về.
Giá trị trả về không cho phép thay đổi ở đây. Vì vậy
chúng ta định nghĩa đối tượng trả về kiểu const.
12/18/201413 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1 Nạp chồng
Nạp chồng toán tử 1 ngôi:
Là toán tử nhận một toán hạng. Ví dụ: - (dấu âm), ++, --
Cú pháp nạp chồng cho dấu âm:
12/18/201414 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1 Nạp chồng
Hàm const: Khi nào thì chỉ định hàm là const?
• Hàm thành viên const không được phép biến đổi dữ liệu
thành viên của lớp
• Đối tượng const chỉ có thể gọi được hàm thành viên const.
Phong cách lập trình tốt:
• Bất cứ hàm thành viên nào không biến đổi dữ liệu thành
viên cần chỉ định const.
• Sử dụng từ khóa const cuối khai báo hàm và dòng đầu
hàm.
12/18/201415 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
2. Hàm bạn
Hàm friend của một lớp:
• Không phải là hàm thành viên
• Được truy cập trực tiếp tới các thành viên private
Giống như các hàm thành viên
Dùng từ khóa friend trước khai báo hàm
• Chỉ định trong định nghĩa lớp
• Nhưng chúng không phải là hàm thành viên.
12/18/201416 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
2. Hàm bạn
Cú pháp
12/18/201417 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
2. Hàm bạn
Nạp chồng toán tử:
• Cách dùng thường gặp nhất với friend
• Cải thiện hiệu quả
• Tránh phải gọi tới các hàm thành viên truy cập và biến đổi
Có thể trao quyền truy cập toàn bộ như hàm friend
friend có thể là bất cứ hàm nào.
12/18/201418 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
2. Hàm bạn
Ví dụ:
Định nghĩa hàm bạn:
12/18/201419 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
3. Lớp bạn
Một lớp có thể là bạn của bất kì một lớp nào khác
Nếu lớp F là bạn của lớp C thì:
• Các hàm thành viên của lớp F là bạn của lớp C.
• Không thuận nghịch (chiều ngược lại thì không đúng)
• Tình bạn có thể được ban tặng nhưng không thể đòi hỏi
Để lớp F trở thành bạn của lớp C thì bạn phải khai báo
lớp F là bạn ở bên trong lớp C.
Khi lớp F là bạn của lớp C thì lớp F có thể truy cập trực
tiếp đến lớp C.
12/18/201420 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
3. Lớp bạn
Cú pháp:
12/18/201421 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
EOF!
12/18/2014Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi22
Các file đính kèm theo tài liệu này:
- nnlt_5_napchongtoantu_hamban_933_1993530.pdf