Bài giảng Kỹ thuật lập trình hệ cơ điện tử: Chương 11 - Kế thừa và đa hình được biên soạn bao gồm các nội dung chính sau: Lớp cơ sở và Lớp thừa kế; Điều khiển truy cập và Tính kế thừa; Kiểu kế thừa; Đa kế thừa; Đa hình trong C++; Hàm virtual; Hàm pure virtual. Mời các bạn cùng tham khảo bài giảng!
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI KỸ THUẬT LẬP TRÌNH HỆ CƠ ĐIỆN TỬ Programming Engineering in Mechatronics Giảng viên: TS. Đặng Thái Việt Đơn vị: Bộ mơn Cơ điện tử, Viện Cơ khí Hà Nội, 09/2017 KỸ THUẬT LẬP TRÌNH HỆ CƠ ĐIỆN TỬ Tổng quan về ngơn ngữ lập trình Cấu trúc Giới thiệu sơ bộ ngơn ngữ C Vào/ra trong C Kiểu, tốn tử và biểu thức Cơ sở của C++ Dịng điều khiển 10 Lớp Hàm và cấu trúc chương trình 11 Kế thừa và đa hình Con trỏ và mảng 12 Luồng vào/ra trong C++ CHƯƠNG 11. Kế thừa và Đa hình 11.1 Kế thừa Lớp cơ sở và Lớp thừa kế Điều khiển truy cập và Tính kế thừa Kiểu kế thừa Đa kế thừa 11.2 Đa hình Đa hình trong C++ Hàm virtual Hàm pure virtual Kế thừa 1. Kế thừa Tính kế thừa (Inheritance) Tính kế thừa cho phép định nghĩa lớp điều kiện lớp khác, mà làm cho dễ dàng để tạo trì ứng dụng • • Lớp tồn gọi Base Class - lớp sở, lớp xem Derived Class – lớp thừa kế Kế thừa Lớp cơ sở (Base Class) và Lớp thừa kế (Derived Class) trong C++ Một lớp kế thừa từ lớp khác, nghĩa là, kế thừa liệu hàm từ nhiều lớp sở • • Để định nghĩa lớp kế thừa (Derived Class), sử dụng danh sách để xác định lớp sở Danh sách liệt kê nhiều lớp sở có form sau: Kế thừa Ví dụ Kế thừa Ví dụ Kế thừa Điều khiển truy cập và Tính kế thừa trong C++ Ø Ø Một lớp kế thừa truy cập tất thành viên private lớp sở Vì thế, thành viên lớp sở, mà hạn chế truy cập tới hàm thành viên lớp kế thừa, nên khai báo private lớp sở Chúng ta tổng kết kiểu truy cập khác nhau, tương ứng với truy cập chúng sau: Kế thừa Ø Một lớp kế thừa (Derived Class) kế thừa tất phương thức lớp sở, ngoại trừ: § Constructor, destructor copy constructor lớp sở § Overloaded operator (tốn tử nạp chồng) lớp sở § Hàm friend lớp sở Kế thừa Kiểu kế thừa trong C++ Ø § Khi kế thừa từ lớp sở, lớp sở kế thừa thơng qua kiểu kế thừa public, protected private Kiểu kế thừa C++ xác định Accessspecifier giải thíc Kiểu kế thừa Public: Khi kế thừa từ lớp sở public, thành viên public lớp sở trở thành thành viên public lớp kế thừa; thành viên protected lớp có sở trở thành thành viên protected lớp kế thừa Một thành viên private lớp sở khơng truy cập trực tiếp từ lớp kế thừa, truy cập thông qua lời gọi tới thành viên public protected lớp sở 10 Kế thừa Kiểu kế thừa trong C++ § § Kiểu kế thừa protected: Khi kế thừa từ lớp sở protected, thành viên public protected lớp sở trở thành thành viên protected lớp kế thừa Kiểu kế thừa private: Khi kế thừa từ lớp sở private, thành viên public protected lớp sở trở thành thành viên private lớp kế thừa 11 Kế thừa Đa kế thừa trong C++ Ø Một lớp C++ kế thừa thành viên từ nhiều lớp, cú pháp: Tại đây, access_modifier public, protected private cung cấp cho lớp sở, chúng phân biệt với dấu phảy 12 Kế thừa Ví dụ 13 Kế thừa Ví dụ 14 Kế thừa Ví dụ 15 Đa hình Đa hình trong C++ Ø Ø Đa hình (polymorphism) nghĩa có nhiều hình thái khác Tiêu biểu là, đa hình xuất có cấu trúc cấp bậc lớp chúng liên quan với tính kế thừa Đa hình C++ nghĩa lời gọi tới hàm thành viên làm cho hàm khác để thực thi phụ thuộc vào kiểu đối tượng mà triệu hồi hàm 16 Đa hình Ví dụ 17 Đa hình Ví dụ 18 Đa hình Ví dụ Lý cho output khơng xác vì: lời gọi hàm dientich() thiết lập lần compiler phiên định nghĩa lớp sở Điều gọi static resolution (sự phân giải tĩnh) lời gọi hàm, static linkage (sự liên hợp tĩnh) – lời gọi hàm sửa trước chương trình thực thi Đơi gọi early binding (hoặc static binding) hàm dientich() thiết lập biên dịch chương trình 19 Đa hình Ví dụ Bây giờ, sửa chương trình chút đặt trước dòng int dientich() lớp Hinh với từ khóa virtual, trơng sau: 20 Đa hình Hàm virtual trong C++ Ø Ø Một hàm virtual hàm lớp sở mà khai báo sử dụng từ khóa virtual C++ Việc định nghĩa lớp sở hàm virtual, với phiên khác lớp kế thừa, báo cho compiler rằng: không muốn Static Linkage cho hàm Những làm muốn việc lựa chon hàm để gọi điểm cung cấp chương trình dựa kiểu đối tượng, mà với gọi Hoạt động gọi tắt dynamic linkage, late binding C++ 21 Đa hình Hàm pure virtual trong C++ Ø Nó bạn muốn bao hàm virtual lớp sở, tái định nghĩa lớp kế thừa để phù hợp với đối tượng lớp đó, định nghĩa khơng có ý nghĩa =0 nói cho compiler hàm khơng có phần thân hàm virtual gọi hàm pure virtual function C++ 22 ...KỸ THUẬT LẬP TRÌNH HỆ CƠ ĐIỆN TỬ Tổng quan về ngơn ngữ? ?lập? ?trình Cấu trúc Giới thiệu sơ bộ ngơn ngữ C Vào/ra trong C Kiểu, tốn tử và biểu thức Cơ? ?sở của C++ Dịng điều khiển... Dịng điều khiển 10 Lớp Hàm và cấu trúc? ?chương? ?trình 11 Kế thừa và đa hình Con trỏ và mảng 12 Luồng vào/ra trong C++ CHƯƠNG? ?11. Kế thừa và Đa hình 11. 1 Kế thừa Lớp? ?cơ? ?sở và Lớp thừa kế Điều khiển truy cập và Tính kế thừa ... Đơi gọi early binding (hoặc static binding) hàm dientich() thiết lập biên dịch chương trình 19 Đa hình Ví dụ Bây giờ, sửa chương trình chút đặt trước dịng int dientich() lớp Hinh với từ khóa virtual,