Danh mục

Bài giảng Lập trình hướng đối tượng: Bài 7 - Phạm Thị Bích Vân

Số trang: 16      Loại file: pptx      Dung lượng: 84.98 KB      Lượt xem: 16      Lượt tải: 0    
Jamona

Phí tải xuống: 16,000 VND Tải xuống file đầy đủ (16 trang) 0
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Bài 7 cung cấp kiến thức về đa hình trong lập trình hướng đối tượng. Nội dung trình bày trong chương này gồm có: Các phương thức ảo, lớp cơ sở trừu tượng, các thành viên ảo của một lớp,... Mời các bạn cùng tham khảo để biết thêm các 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: Bài 7 - Phạm Thị Bích VânBài7:Đahình Giớithiệu• Đahìnhlàkhảnăngchophép: • Cho phép các lớp được định nghĩa các phương thức trùng nhau:cùngtên,cùngsốlượngvàkiểuthamsố,cùngkiểutrả về. Việc định nghĩa phương thức trùng nhau của các lớp kế thừanhaucònđượcgọilàsựnạpchồngphươngthức. • Khigọicácphươngthứctrùngtên,dựavào đốitượng đang gọimàchươngtrìnhsẽthựchiệnphươngthứccủalớptương ứng,vàdođó,sẽchocáckếtquảkhácnhau. • Vídụ:Xâydựnglớpngười,lớpsinhviên,lớpgiáoviêncùng cóphươngthứcNhap()vàphươngthứcXuat().Nhưvậy đahìnhlàkhảnăngchophépviếtchươngtrình đểxửlýtổng quát các đối tượng của tất cả các lớp trong một phân cấp nhưcác đốitượngcủalớpcơsở.Dovậymộtthông điệp đượcgửi đimàkhôngcầnbiếtđốitượngnhậnthuộclớpnào. Cácphươngthứcảo• Xétvídụ3lớpA,B,Cđềucóphươngthứcxuat()A*p,*q,*r;//p,q,rlàcontrỏkiểuAAa;//alàđốitượngkiểuABb;//blàđốitượngkiểuBCc;//clàđốitượngkiểuc//p=&a;q=&b;r=&c;//p>xuat();q>xuat();r>xuat();⇒ CảbacâulệnhđềugọiđếnA::xuat()⇒ Giảipháp:Xâydựngxuat()làphươngthứcảo Cácphươngthứcảo• GiảsửAlàlớpcơsở.• B,C,Dlàlớpdẫnxuất.• Giảsửcáclớpnàyđềucóphươngthứcxuat().• Đểđịnhnghĩacácphươngthứcnàylàảocó2cách: o Hoặc thêm từ khoá virtual vào dòng tiêu đề của phươngthứcbêntrongđịnhnghĩalớpcơsởA. o Hoặc thêm từ khoá virtual vào dòng tiêu đề bên trongđịnhnghĩacủatấtcảcáclớpA,B,CvàD Cácphươngthứcảo• Khi xây dựng một cấu trúc cây phân cấp, người lập trìnhchuẩnbịcáchànhvichungcủalớpđó.• Hành vi giao tiếp chung sẽ được dùng để thể hiện cùnghànhvi,nhưngcócáchànhđộngkhácnhau đó làphươngthứcảo.Vídụ:Đọcthêmvídụtrang122giáotrìnhLTHĐT CácphươngthứcảoclassBase classDerived:publicBase {{ public:public: virtualvoidDisplay()virtualvoidDisplay() {{ cout Cácphươngthứcảo• Kếtquảkhichạychươngtrình:• Giảithích: • Nếukhôngcókhaibáovirtualchophươngthức Base::Display() khiđólệnhShow(D)tronghàmmain()sẽgọiđến Base::Display() (vìđốitượngcủalớpdẫnxuấtcũnglàđốitượngcủalớpcơsở). • Nhờ khai báo virtual cho phương thức Base::Display() nên sẽ khôngthựchiệngọiphươngthức Base::Display()mộtcáchcứng nhắctronghàmShow() màtùythuộcvàokiểucủathamsốvàolúc chạy chương trình. ( khi truyền tham số B thì Base::Display() đượcgọi,khitruyềnDthìDerived::Display()đượcgọi). Cácphươngthứcảo• Giảithíchcơchế: • Khinhậnthấycókhaibáovirtualtronglớpcơsở,trìnhbiên dịch sẽ thêm vào mỗi đối tượng của lớp cơ sở và lớp dẫn xuất của nó một con trỏ chỉ đến bảng phương thức ảo (virtualfunctiontable),contrỏcótênvptr. • Bảngphươngthức ảolànơichứacáccontrỏchỉđếnđoạn chươngtrìnhđãbiêndịchứngvớicácphươngthứcảo. • Mỗilớpcómộtbảngphươngthứcảo. • Trìnhbiêndịchchỉlậpbảngphươngthứcảokhibắtđầucó việc tạo đối tượng của lớp. Đến khi chương trình chạy, phương thức ảo của đối tượng mới được nối kết và thi hànhthôngquacontrỏvptr Cácphươngthứcảo• Giảithíchcơchế: • Xétvídụtrên:HàmShow(D). • Đối tượng D thuộc lớp Derived tuy bị chuyển đổi kiểu thành một đối tượng thuộc lớp Base nhưng nó không hoàn toàngiốngmộtđốitượngcủaBasechínhcốngnhưB. • Contrỏvptrtrong Bchỉđếnvịtrítrênbảngphươngthức ảo ứng với phương thức Base::Display(), trong khi ...

Tài liệu được xem nhiều: