Bài giảng Phương pháp lập trình hướng đối tượng: Kế thừa lớp đối tượng trình bày các nội dung: Lớp cơ sở – Lớp đẫn xuất, cây kế thừa, kế thừa, thiết kế cây kế thừa, thiết kế lớp hướng kế thừa,... Mời các bạn cùng tham khảo nội dung chi tiết.
GV: Lê Xuân Định L.X.Định CuuDuongThanCong.com https://fb.com/tailieudientucntt Lớp Cơ sở – Lớp Dẫn xuất Phương tiện Giao thông - Thuộc tính: Tốc độ tối đa - Phương thức: Di chuyển Xe cộ - Thuộc tính: Tốc độ tối đa, bánh, thân - Phương thức: Di chuyển (chạy đường) Xethuyền đạp Tàu - Thuộc boong, mũi - Thuộctính: tính:Tốc Tốcđộ độ tối tối đa, đa, bánh, thân, xích, - Phương líp, thức: Di chuyển (trơi mặt nước) - Phương thức: Di chuyển Máy Xebay - Thuộc tính: Tốc độ tối đa, cánh, thân, - Thuộc tính: Tốc độ tối đa, bánh, thân, xăng, đuôi động cơ,thức: Di chuyển (bay trời) - Phương - Phương thức: Di chuyển, đổ xăng L.X.Định CuuDuongThanCong.com Lớp Cơ sở • Các thuộc tính sở • Các phương thức sở: Trừu tượng (thường ảo, tức định nghĩa giao diện, nội dung cài đặt chưa có có đơn giản) thừa kế Lớp Dẫn xuất • Các thuộc tính sở • Các thuộc tính dẫn xuất • Các phương thức sở • Các phương thức dẫn xuất: Cụ thể (có nội dung cài đặt cụ thể) https://fb.com/tailieudientucntt PT Giao thông Cây kế thừa tốc độ tối đa DiChuyển() = Phương tiện Giao thông Xe cộ Xe máy Xe đạp Xe Xe tải Tàu thuyền Tàu cánh ngầm Thuyền buồm Xe cộ Máy bay bánh xe thân xe DiChuyển() { /*chạy đường */} Xe đạp Xe cánh thân đuôi DiChuyển() { /* bay không */} Phản lực Trực thăng Máy bay Phản lực Trực thăng L.X.Định CuuDuongThanCong.com https://fb.com/tailieudientucntt Kế thừa (chiều thuận) Bài toán Đã có sẵn lớp SinhVien Thuộc tính: MSSV, điểm lý thuyết (đLT), điểm thực hành (đTH) Phương thức: Khởi tạo, xuất, thi LT, thi TH Tính điểm Tổng kết (đTK): Trả đTK = (6*đLT + 4*đTH)/10 Cần định nghĩa lớp SinhVienB Thuộc tính: MSSV, điểm lý thuyết (đLT), điểm thực hành (đTH), điểm cộng (đCộng) Phương thức: Khởi tạo, xuất, thi LT, thi TH, làm tập (lấy điểm cộng) Tính điểm Tổng kết (đTK): Trả đTK = (6*đLT + 4*đTH)/10 + đCộng L.X.Định CuuDuongThanCong.com https://fb.com/tailieudientucntt Kế thừa – Giao diện Lớp dẫn xuất Thừa kế thành phần(*) lớp sở; Thêm số thành phần riêng lớp dẫn xuất; Cài đặt lại (đè lên) số phương thức lớp sở † (*) Nhưng lớp dẫn xuất truy cập tới thành phần phạm vi protected & public lớp sở † Cài đặt đè: override L.X.Định CuuDuongThanCong.com SinhVien SinhVienB MSSV điểmLýThuyết điểmThựcHành điểmCộng MSSV điểmLýThuyết điểmThựcHành điểmCộng SinhVien(mssv) xuất() thiLýThuyết() thiThựcHành() điểmTổngKết() làmBàiTập() class SinhVien { private: protected: int mssv; float dLT, dTH; public: SinhVien(int mssv); }; Thừa kế SinhVienB(mssv) xuất() thiLýThuyết() thiThựcHành() điểmTổngKết() làmBàiTập() class SinhVienB:public SinhVien {private: float dCong; public: void lamBT(); SinhVienB(int mssv); void xuat(); float diemTK(); }; https://fb.com/tailieudientucntt Kế thừa – Giao diện Lớp dẫn xuất Thừa kế thành phần(*) lớp sở; Thêm số thành phần riêng lớp dẫn xuất; Cài đặt lại (đè lên) số phương thức lớp sở † (*) Nhưng lớp dẫn xuất truy cập tới thành phần phạm vi protected & public lớp sở † Cài đặt đè: override L.X.Định CuuDuongThanCong.com SinhVien SinhVienB MSSV điểmLýThuyết điểmThựcHành điểmCộng MSSV điểmLýThuyết điểmThựcHành điểmCộng SinhVien(mssv) xuất() thiLýThuyết() thiThựcHành() điểmTổngKết() làmBàiTập() class SinhVien {protected: public: SinhVien(int mssv); void xuat(); void thiLT(); void thiTH(); float diemTK(); }; Thêm SinhVienB(mssv) xuất() thiLýThuyết() thiThựcHành() điểmTổngKết() làmBàiTập() class SinhVienB:public SinhVien {private: float dCong; public: void lamBT(); SinhVienB(int mssv); void xuat(); float diemTK(); }; https://fb.com/tailieudientucntt Kế thừa – Giao diện Lớp dẫn xuất Thừa kế thành phần(*) lớp sở; Thêm số thành phần riêng lớp dẫn xuất; Cài đặt lại (đè lên) số phương thức lớp sở † (*) Nhưng lớp dẫn xuất truy cập tới thành phần phạm vi protected & public lớp sở † Cài đặt đè: override L.X.Định CuuDuongThanCong.com SinhVien SinhVienB MSSV điểmLýThuyết điểmThựcHành điểmCộng MSSV điểmLýThuyết điểmThựcHành điểmCộng SinhVien(mssv) xuất() thiLýThuyết() thiThựcHành() điểmTổngKết() làmBàiTập() class SinhVien {protected: public: SinhVien(int mssv); void xuat(); virtual void xuat(); void thiLT(); void thiTH(); virtual float diemTK(); float diemTK(); }; Đè SinhVienB(mssv) xuất() thiLýThuyết() thiThựcHành() điểmTổngKết() làmBàiTập() class SinhVienB:public SinhVien {private: float dCong; public: void lamBT(); SinhVienB(int mssv); void xuat(); float diemTK(); }; https://fb.com/tailieudientucntt Kế thừa – Cài đặt đè Điều kiện để cài đặt đè Lớp sở phải cho phép đè khai báo virtual; Lớp dẫn xuất phải khai báo lại nguyên mẫu hàm lớp sở Nếu phương thức khơng virtual L.X.Định SinhVien SinhVienB MSSV điểmLýThuyết điểmThựcHành điểmCộng MSSV điểmLýThuyết điểmThựcHành điểmCộng SinhVien(mssv) xuất() thiLýThuyết() thiThựcHành() điểmTổngKết() làmBàiTập() class SinhVien {protected: PThức lớp dẫn public: SinhVien(int mssv); xuất độc lập với void xuat(); virtual void xuat(); phương thức void thiLT(); lớp sở! void thiTH(); virtual float diemTK(); float diemTK(); }; CuuDuongThanCong.com Đè SinhVienB(mssv) xuất() thiLýThuyết() thiThựcHành() điểmTổngKết() làmBàiTập() class SinhVienB:public SinhVien {private: float dCong; public: void lamBT(); SinhVienB(int mssv); void xuat(); float diemTK(); }; https://fb.com/tailieudientucntt Kế thừa – Cài đặt đè Một số phương thức lớp dẫn xuất Có giao diện (nguyên mẫu hàm) với lớp sở, Khác phần cài đặt (thường cụ thể, chi tiết hơn) Lựa chọn 1: Cài đặt lại hoàn toàn Lựa chọn 2: Tái sử dụng phần cài đặt lớp sở (nếu có) class SinhVien { protected: int mssv; float dLT, dTH; mssv, public: dLT, dTH virtual void xuat(); // Xuất tất thuộc tính }; L.X.Định CuuDuongThanCong.com class SinhVienB:public SinhVien { private: mssv, float dCong; dLT, dTH, public: dCong void xuat(); // Xuất tất thuộc tính }; https://fb.com/tailieudientucntt Kế thừa – Cài đặt đè Một số phương thức lớp dẫn xuất Có giao diện (nguyên mẫu hàm) với lớp sở, Khác phần cài đặt (thường cụ thể, chi tiết hơn) Lựa chọn 1: Cài đặt lại hoàn toàn Lựa chọn 2: Tái sử dụng phần cài đặt lớp sở (nếu có) void SinhVien::xuat() { cout