Toán tử 1 ngôi (unary) nếu được cài đặt là hàm không thành viên thì cần bao nhiêu tham số?

Bài tập  Định nghĩa lớp Nhân viên [Employee]  Private:Tên, Tuổi, Giới Tính, Quốc Tịch  Public: void printCheck[]  Protected:CMTND  Định nghĩa hai lớp con kế thừa từ lớp Nhân_Viên  Nhân viên được trả lương [SalariedEmployee]  Nhân viên bán thời gian, theo giờ [HourlyEmployee]  Định nghĩa lại hàm printCheck[] riêng của hai lớp conTóm tắt về kế thừa  Kế thừa cho phép sử dụng lại code  Cho phép một lớp kế thừa từ lớp khác và thêm các chức năng mới  Lớp con kế thừa những thành viên của lớp cơ sở và có thể thêm thành viên mới  Biến thành viên private trong lớp cơ sở không thể được truy xuất “theo tên” trong lớp con  Hàm thành viên private không được kế thừa, chỉ được sử dụng riêng ở lớp cơ sở  Có thể định nghĩa lại hàm thành viên của lớp cơ sở trong lớp con  Các lớp con khác nhau có thể có những định nghĩa khác nhau  Thành viên trong khu vực protected của l

Bạn đang xem trước 20 trang tài liệu Giáo trình Ngôn ngữ lập trình - Bài 6: Nạp chồng toán tử và Kế thừa - Lê Nguyễn Tuấn Thành, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên

Ngôn ngữ lập trình Bài 6: Nạp Chồng Toán Tử và Kế Thừa Giảng viên: Lê Nguyễn Tuấn Thành Email: Bộ Môn Công Nghệ Phần Mềm – Khoa CNTT Trường Đại Học Thủy Lợi Nội dung 2  Nạp chồng toán tử [Operator Overloading] và Hàm bạn [Friend Functions]  Kế thừa [Inheritance] Bài giảng có sử dụng hình vẽ trong cuốn sách “Absolute C++. W. Savitch, Addison Wesley, 2002” 1. Nạp chồng toán tử và Hàm bạn Operator Overloading and Friend Functions Mục tiêu 4  Nạp chồng toán tử cơ bản  Toán tử hai ngôi [binary operators]  Toán tử một ngôi [unary operators]  Nạp chồng bằng hàm thành viên  Hàm bạn và Lớp bạn L ớ p M o n e y 5 Giới thiệu nạp chồng toán tử 6  Những toán tử như +,-, %, == etc. thực ra là những hàm!  Các hàm đặc biệt này được gọi với cú pháp khác so với cách gọi hàm thông thường  Gọi hàm thông thường: Tên_Hàm [Danh_Sách_Đối_Số]  Với toán tử: ví dụ, x + 7, “+” là một toán tử 2 ngôi [binary operator] với x, 7 là 2 toán hạng [operands]  Thử viết theo cách gọi hàm thông thường: +[x,7]  “+” là tên hàm  x, 7 là tham số của hàm  Hàm “+” trả lại giá trị là tổng của 2 đối số Tại sao dùng nạp chồng toán tử? 7  Những toán tử được xây dựng sẵn  Ví dụ, +, -, = , %, ==, /, *  Đã thao tác được với các kiểu dựng sẵn của C++  Nhưng liệu chúng ta có thể thực hiện phép + với 2 đối tượng của lớp Money?, giống như: money1 + money2;  Để làm được điều này, chúng ta phải nạp chồng những toán tử này cho lớp Money! Cơ bản về nạp chồng 8  Nạp chồng toán tử  Tương tự như với nạp chồng hàm  Toán tử bản thân nó là tên của hàm  Ví dụ khai báo const Money operator + [const Money& amount1, const Money& amount2];  Nạp chồng toán tử + với toán hạng là đối tượng kiểu Money  Giá trị trả lại là một kiểu Money  Mục đích: cho phép thực hiện phép + trên hai đối tượng của lớp Money Nạp chồng toán tử “+” 9 const Money operator + [const Money& amount1, const Money& amount2];  Chú ý: hàm nạp chồng toán tử “+” này không phải hàm thành viên của lớp Money  Định nghĩa, cài đặt của hàm này phức tạp hơn so với phép cộng thông thường [phải tính đến biến thành viên, kiểm tra giá trị âm/dương, ] Định nghĩa nạp chồng toán tử “+” cho lớp Money 10 Nạp chồng toán tử “==” 11  Toán tử so sánh bằng “==”  Cho phép so sánh các đối tượng của lớp Money  Khai báo: bool operator ==[const Money& amount1, const Money& amount2];  Hàm này cũng không phải là hàm thành viên của lớp Money Nạp chồng toán tử một ngôi [Unary operators] 12  Toán tử một ngôi: chỉ có một toán hạng  Toán tử phủ định [negation] “-” X = -Y // đặt X bằng giá trị phủ định của Y  Toán tử tăng ++  Toán tử giảm -- Nạp chồng toán tử “-” cho lớp Money 13  Khai báo hàm nạp chồng toán tử “-” cho lớp Money const Money operator –[const Money& amount];  Không phải hàm thành viên của lớp  Chú ý: chỉ có một đối số, do toán tử này chỉ có một toán hạng  Định nghĩa hàm nạp chồng toán tử một ngôi “-” const Money operator –[const Money& amount] { return Money[-amount.getDollars[], -amount.getCents[]]; }  Trả lại một đối tượng vô danh [anonymous object]  Lưu ý: nạp chồng toán tử “-” có hai trường hợp!  Khi nó là toán tử 2 ngôi, với 2 toán hạng/đối số  Khi nó là toán tử 1 ngôi, với 1 toán hạng/đối số Sử dụng nạp chồng toán tử “-” 14  Xét ví dụ sau: Money amount1[10], amount2[6], amount3; amount3 = amount1 – amount2; => Gọi nạp chồng toán tử 2 ngôi “-” amount3 = -amount1; => Gọi hàm nạp chồng toán tử 1 ngôi “-” Nạp chồng toán tử như hàm thành viên [1/2] 15  Những ví dụ ở trước: các hàm đứng độc lập không phải thành viên của lớp  Có thể nạp chồng như “toán tử thành viên”, được xem như hàm thành viên  Khi toán tử là hàm thành viên  Chỉ có MỘT tham số, không phải có 2 tham số!  Được tượng được gọi [phía sau toán tử] được xem là tham số duy nhất Nạp chồng toán tử như hàm thành viên [2/2] 16  Ví dụ: Money cost[1, 50], tax[0, 15], total; total = cost + tax;  Nếu toán tử “+” được nạp chồng như toán tử thành viên thì:  Biến/ đối tượng cost là đối tượng gọi hàm nạp chồng  Đối tượng tax là tham số duy nhất của hàm nạp chồng  Tưởng tượng giống như cách viết sau total = cost.+[tax];  Khai báo của toán tử “+” trong định nghĩa lớp const Money operator +[const Money& amount];  Chú ý CHỈ CÓ MỘT đối số Nạp chồng một số toán tử khác 17  Toán tử gọi hàm: []  Toán tử &, ||, dấu phẩy  Toán tử gán = [assignment operator], phải được nạp chồng như hàm thành viên!  Toán tử tăng, giảm: ++, --  Mỗi toán tử có 2 phiên bản:  Tiền tố [prefix notation]: ++x;  Hậu tố [postfix notation]: x++;  Toán tử mảng [ ], nạp chồng như hàm thành viên!  Toán tử >>, > và myObject;  Thay vì phải viết: myObject.output[]; myObject.input[]; Toán tử chèn

Chủ Đề