Thông tin tài liệu:
Chương 3 - Kế thừa. Chương này trình bày những vấn đề sau đây: Tính kế thừa và dẫn xuất, phân loại kế thừa, hàm tạo và hàm hủy đối với sự kế thừa. Mời các bạn cùng tham khảo nội dung chi tiết.
Nội dung trích xuất từ tài liệu:
Bài giảng Lập trình hướng đối tượng: Chương 3 - Phạm Minh Hoàn CHƯƠNG3:KẾTHỪA PhạmMinhHoànBộmôncôngnghệthôngtin–ĐạihọcKinhtếQuốcdân Email:hoanpm@neu.edu.vn PhạmMinhHoànNEU NỘIDUNGCHƯƠNGTRÌNH Chương này trình bày những vấn đề sau đây: – Tínhkếthừavàdẫnxuất. – Phânloạikếthừa. – Hàmtạovàhàmhủyđốivớisựkếthừa. PhạmMinhHoànNEU SỰDẪNXUẤTVÀTÍNHKẾTHỪA KHÁINIỆM Kế thừa là một trong các khái niệm cơ sở của phươngpháplậptrìnhhướngđốitượng. Tínhkếthừachophépđịnhnghĩacáclớpmới từcáclớpđãcó. Lớp đã có được gọi là lớp cơ sở, lớp mới được gọilàlớpdẫnxuất. Một lớp có thể là lớp cơ sở cho nhiều lớp dẫn xuấtkhácnhau. Lớpdẫnxuấtsẽkếthừamộtsốthànhphần(dữ liệu và hàm) của lớp cơ sở, đồng thời có thêm nhữngthànhphầnmới. PhạmMinhHoànNEU SỰDẪNXUẤTVÀTÍNHKẾTHỪA PHÂNLOẠI Đơnkếthừa A B Đakếthừa A A A B C B C B C D D PhạmMinhHoànNEU SỰDẪNXUẤTVÀTÍNHKẾTHỪA ĐỊNHNGHĨAKẾTHỪA GiảsửđãđịnhnghĩacáclớpA,B,....Cúphápđể xây dựng lớp Z dẫn xuất từ các lớp A, lớp B, ... nhưsau: classZ:modeA[,modeB[...]] { private: //KhaibáocácthuộctínhcủalớpZ public: //ĐịnhnghĩacáchàmthànhphầncủalớpZ }; PhạmMinhHoànNEU SỰDẪNXUẤTVÀTÍNHKẾTHỪA ĐỊNHNGHĨAKẾTHỪA Trongđó mode có thể là private hoặc publicvớiýnghĩanhưsau: – Kế thừa theo kiểu public thì tất cả các thành phần public của lớp cơ sở cũng là thành phần publiccủalớpdẫnxuất. – Kế thừa theo kiểu private thì tất cả các thành phần public của lớp cơ sở sẽ trở thành các thànhphầnprivatecủalớpdẫnxuất. PhạmMinhHoànNEU SỰDẪNXUẤTVÀTÍNHKẾTHỪA ĐỊNHNGHĨAKẾTHỪAChúý: – Trong cả haitrườnghợp ởtrênthìthành phầnprivatecủalớpcơsởlàkhôngđược kế thừa. Lớp dẫn xuất không cho phép truynhậpđếncácthànhphầnprivatecủa lớpcơsở. – Lớp dẫn xuất không cho phép kế thừa cáchàmtạo,hàmhủyvàtoántửgáncủa lớpcơsở. PhạmMinhHoànNEU SỰDẪNXUẤTVÀTÍNHKẾTHỪA TRUYNHẬPĐẾNCÁCTHÀNHPHẦN Thànhphầncủalớpdẫnxuấtbaogồm: – Cácthànhphầnkhaibáotronglớpdẫnxuất. – Các thành phần mà lớp dẫn xuất thừa kế từ cáclớpcơsở. Quy tắcsử dụngcác thành phầntrong lớp dẫnxuất: Tên_đối_tượng.Tên_lớp::Tên_thành_phần PhạmMinhHoànNEU SỰDẪNXUẤTVÀTÍNHKẾTHỪA VÍDỤclassA{ public:intn; voidnhap() { coutn; }}; PhạmMinhHoànNEU SỰDẪNXUẤTVÀTÍNHKẾTHỪA VÍDỤclassB:publicA{ public:intm; voidnhap() { coutm; }}; PhạmMinhHoànNEU SỰDẪNXUẤTVÀTÍNHKẾTHỪA VÍDỤ Xétkhaibáo: Bob; Khiđó: – ob.mlàthuộctínhmkhaibáotrongB – ob.nlàthuộctínhnthừakếtừlớpA – ob.B::nhap()làhàmnhap()địnhnghĩatronglớp B – ob.A::nhap()làhàmnhap()địnhnghĩatronglớp A – ob.nhap(). PhạmMinhHoànNEU SỰDẪNXUẤTVÀTÍNHKẾTHỪA CHÚÝ Nếu truy xuất đến thành phần của lớp dẫn xuất màkhôngdùngtênlớpchươngtrìnhdịchphảitự phánđoánđểbiếtthànhphầnđóthuộclớpnào. Thứtựtruyxuất:lớpdẫnxuất,cáclớpcóquanhệ gần với lớp dẫn xuất sẽ được xét trước, các lớp quanhệxahơnxétsau. Trong trường hợp thành phần đang xét có mặt đồngthờitrong2lớpcơsởcócùngmộtcấpquan hệvớilớpdẫnxuất,chươngtrìnhdịchsẽđưara thôngbáolỗi. PhạmMinhHoànNEU SỰDẪNXUẤTVÀTÍNHKẾTHỪA VÍDỤ1#include#include#includeclassA{ inta; protected: intb; public: voidset_ab(); intget_a(void); voidshow_a(void); voidset_b() {b=20;}}; PhạmMinhHoànNEU SỰ DẪN XUẤT VÀ TÍNH KẾ THỪA VÍ DỤ 1classB:publicA{ intc; public: voidmul(void); voiddisplay(void);}; PhạmMinhHoànNEU SỰ DẪN XUẤT VÀ TÍNH KẾ THỪA ...