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 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 ...

pdf22 trang | Chia sẻ: putihuynh11 | Lượt xem: 415 | Lượt tải: 0download
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:

  • pdfnnlt_5_napchongtoantu_hamban_933_1993530.pdf
Tài liệu liên quan