1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Ngôn ngữ lập trình Bài 6 Lê Nguyễn Tuấn Thành

50 172 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Bài giảng Ngôn ngữ lập trình Bài 6 Nạp chồng toán tử và kế thừa cung cấp cho người học các kiến thức Nạp chồng toán tử (Operator Overloading) và Hàm bạn (Friend Functions); kế thừa (Inheritance). Mời các bạn cùng tham khảo.

NGƠN NGỮ LẬP TRÌNH Bài 6: Nạp Chồng Tốn Tử Kế Thừa Giảng viên: Lê Nguyễn Tuấn Thành Email: thanhlnt@tlu.edu.vn Bộ Môn Công Nghệ Phần Mềm – Khoa CNTT Trường Đại Học Thủy Lợi NỘI DUNG  Nạp chồng toán tử (Operator Overloading) Hàm bạn (Friend Functions)  Kế thừa (Inheritance) Bài giảng có sử dụng hình vẽ sách “Practical Debugging in C++, A Ford and T Teorey, Prentice Hall, 2002” NẠP CHỒNG TOÁN TỬ VÀ HÀM BẠN Operator Overloading and Friend Functions MỤC TIÊU  Nạp chồng toán tử Toán tử hai ngơi (binary operators)  Tốn tử ngơi (unary operators)  Nạp chồng hàm thành viên   Hàm bạn lớp bạn LỚP MONEY GIỚI THIỆU NẠP CHỒNG TỐN TỬ Những tốn tử +,-, %, == etc thực hàm!  Các hàm đặc biệt 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 tốn tử: ví dụ, x + 7, “+” tốn tử ngơi (binary operator) với x, tốn hạng (operands) Thử viết theo cách gọi hàm thông thường: +(x,7)    “+” tên hàm x, tham số hàm Hàm “+” trả lại giá trị tổng đối số TẠI SAO DÙNG NẠP  Những toán tử xây dựng sẵn (built-in operators)    CHỒNG TỐN TỬ? Ví dụ, +, -, = , %, ==, /, * Đã thao tác với kiểu dựng sẵn C++ (built-in types) Nhưng muốn thực phép + với đối tượng lớp SinhVien ?, giống như: sinh_vien1 + sinh_vien2;  Chúng ta nạp chồng toán tử này!  Để thao tác với kiểu chúng ta! CƠ BẢN  Nạp chồng toán tử    VỀ NẠP CHỒNG Tương tự với nạp chồng hàm Tốn tử thân tên 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 đối tượng kiểu Money  Giá trị trả lại kiểu Money  Mục đích: cho phép thực phép + hai đối tượng lớp Money NẠP CHỒNG “+” const Money operator + (const Money& amount1, const Money& amount2);   Chú ý: hàm nạp chồng toán tử “+” hàm thành viên lớp Money Định nghĩa, cài đặt hàm phức tạp 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, …) VÍ DỤ ĐỊNH NGHĨA NẠP CHỒNG TOÁN TỬ “+” CHO LỚP MONEY 10 ĐỊNH NGHĨA LẠI  HÀM THÀNH VIÊN Xét hàm printCheck() lớp sở Nhân_Viên   Được định nghĩa lại lớp thừa kế Do loại nhân viên khác có kiểm tra (check) khác 36 VÍ DỤ GIAO DIỆN CHO LỚP THỪA KẾ HOURLYEMPLOYEE (1/2) 37 VÍ DỤ GIAO DIỆN CHO LỚP THỪA KẾ HOURLYEMPLOYEE (2/2) 38 GIAO DIỆN LỚP HOURLYEMPLOYEE  Lưu ý phần đầu chương trình Cấu trúc #ifndef  Khai báo bao gồm (include) thư viện liên quan  Khai báo bao gồm lớp sở employee.h!    Khai báo cấu trúc kế thừa class HourlyEmployee : public Employee Giao diện (interface) lớp thừa kế liệt kê thành viên định nghĩa lại   Bởi tất thành viên khác kế thừa từ lớp sở định nghĩa trước đó! Lớp HourlyEmployee thêm thành viên sau: Hàm khởi tạo  Biến thành viên: wageRate, hours  Hàm thành viên: setRate(), getRate(), setHours(), getHours()  39 ĐỊNH NGHĨA LẠI HÀM THÀNH VIÊN TRONG LỚP HOURLYEMPLOYEE  Lớp HourlyEmployee định nghĩa lại:   Hàm thành viên printCheck() lớp sở Phiên hàm printCheck() “ghi đè” (overrides) phiên cũ cài đặt lớp sở Employee Cài đặt hàm thành viên phải thực lớp HourlyEmployee  Định nghĩa lại hàm khác nạp chồng hàm nào?    Rất khác Định nghĩa lại hàm lớp thừa kế CÙNG danh sách tham số  Thực chất viết lại hàm   Nạp chồng hàm Danh sách tham số khác  Định nghĩa hàm với tham số khác  40 TRUY XUẤT  HÀM ĐỊNH NGHĨA LẠI Khi định nghĩa lại hàm lớp con, định nghĩa hàm lớp sở không bị đi! Employee JaneE; HourlyEmployee SallyH; JaneE.printCheck(); //gọi hàm printCheck lớp Employee SallyH.printCheck(); //gọi hàm printCheck lớp HourlyEmployee SallyH.Employee::printCheck(); //gọi hàm printCheck lớp Employee! 41 HÀM TẠO  TRONG LỚP THỪA KẾ (1/2) Hàm tạo lớp sở không kế thừa tự động lớp !  Nhưng chúng gọi bên hàm tạo của lớp con! Hàm tạo lớp sở nên khởi tạo tất biến thành viên  Xét ví dụ hàm tạo lớp HourlyEmployee  HourlyEmployee::HourlyEmployee(string theName, string theNumber, double theWageRate, double theHours) : Employee(theName, theNumber), wageRate(theWageRate), hours(theHours) {} 42 HÀM TẠO  (2/2) Nếu lớp không gọi hàm tạo lớp sở:   TRONG LỚP THỪA KẾ Hàm tạo mặc định lớp sở tự động gọi Ví dụ: HourlyEmployee::HourlyEmployee() : wageRate(0), hours(0) {} 43 LƯU Ý: DỮ LIỆU PRIVATE  Lớp kế thừa biến thành viên khu vực private    CỦA LỚP CƠ SỞ Nhưng truy xuất trực tiếp “theo tên” (by-name) đến biến thành viên Ngay truy xuất biến private thông qua hàm thành viên lớp con! Biến thành viên private CHỈ truy xuất “theo tên” hàm thành viên lớp sở mà chúng định nghĩa! 44 LƯU Ý: HÀM THÀNH VIÊN PRIVATE CỦA LỚP CƠ SỞ Không thể truy xuất bên giao diện cài đặt lớp sở  Ngay định nghĩa hàm thành viên lớp  45 KHU VỰC PROTECTED Một phân loại (classification) / khu vực cho thành viên lớp  Cho phép truy xuất “theo tên” thành viên lớp thừa kế    Nhưng không cho phép truy xuất lớp không kế thừa! Trong lớp mà thành viên protected định nghĩa, hoạt động giống thành viên private 46 ĐA KẾ THỪA (MULTIPLE INHERITANCE)  Lớp kế thừa nhiều lớp sở! Cú pháp: lớp sở phân tách dấu phẩy  Ví dụ: class derivedMulti : public base1, base2 {…}  47 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 kế thừa từ lớp Nhân_Viên    Nhân viên trả lương (SalariedEmployees) Nhân viên bán thời gian, theo (HourlyEmployees) Định nghĩa lại hàm printCheck() riêng hai lớp 48 TÓM TẮT  Kế thừa cho phép sử dụng lại code      Cho phép lớp kế thừa từ lớp khác thêm chức Lớp kế thừa thành viên lớp sở thêm thành viên Biến thành viên private lớp sở truy xuất “theo tên” lớp Hàm thành viên private không kế thừa, sử dụng riêng lớp sở Có thể định nghĩa lại hàm thành viên lớp sở lớp   VỀ KẾ THỪA Các lớp khác có định nghĩa khác Thành viên khu vực protected lớp sở truy xuất “theo tên” lớp 49 GIÁO TRÌNH THAM KHẢO Giáo trình chính: W Savitch, Absolute C++, Addison Wesley, 2002  Tham khảo:    A Ford and T Teorey, Practical Debugging in C++, Prentice Hall, 2002 Nguyễn Thanh Thủy, Kĩ thuật lập trình C++, NXB Khoa học Kĩ Thuật, 2006 50 ... VIÊN (1/2) Những ví dụ trước: hàm đứng độc lập khơng phải thành viên lớp  Có thể nạp chồng “toán tử thành viên”, xem hàm thành viên  Khi toán tử hàm thành viên    Chỉ có MỘT tham số, khơng... kê thành viên định nghĩa lại   Bởi tất thành viên khác kế thừa từ lớp sở định nghĩa trước đó! Lớp HourlyEmployee thêm thành viên sau: Hàm khởi tạo  Biến thành viên: wageRate, hours  Hàm thành. .. kế thừa thành viên lớp sở thêm thành viên Biến thành viên private lớp sở truy xuất “theo tên” lớp Hàm thành viên private không kế thừa, sử dụng riêng lớp sở Có thể định nghĩa lại hàm thành viên

Ngày đăng: 15/05/2017, 10:13

Xem thêm: Bài giảng Ngôn ngữ lập trình Bài 6 Lê Nguyễn Tuấn Thành

TỪ KHÓA LIÊN QUAN