Ngôn ngữ lập trình C - Chương 7 doc

24 175 0
Ngôn ngữ lập trình C - Chương 7 doc

Đ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

Ch Ch −¬ −¬ ng ng 7 7 Thõa kÕ Thõa kÕ v v μ μ ® ® a h a h × × nh nh Bài ging C++. 19/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, HXD 2 7.1 T 7.1 T æ æ ng quan vÒ thõa kÕ v ng quan vÒ thõa kÕ v µ µ ® ® a h a h × × nh nh  7.1.1 Tha k trong lp trình HT – Khái nim • Tha k là mt trong ba nguyên tc c bn caLTHT. • Lp c s và lp dn xut: – Lp đc tha k å lp c s, lp tha k å lp dn xut. – Mt lp có th là lp c s cho nhiu lp dn xut. – Mt lp dn xut có th là lp c s cho mt lp khác. • S tha k trong lp dn xut: – Lp dn xut s tha k các thành phn (d liu, hàm) ca lp c s, đng thi thêm vào các thành phn mi. • Lp dn xut s “làm tt hn” (hoc “làm li”) nhng công vic mà lp c s “làm cha tt” (hoc không còn “phù hp” vi lp dn xut). – Lp c s thng đc x lý ging nh mt thành phn có kiu là đi tng ( å khái nim kt tp). Bài ging C++. 19/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, HXD 3 7.1 T 7.1 T æ æ ng quan vÒ thõa kÕ v ng quan vÒ thõa kÕ v µ µ ® ® a h a h × × nh nh  7.1.1 Tha k trong lp trình HT – c đim • Tha k cho phép to kiu mi trên c s lp đang tn ti. – M rng chúng vi nhng thuc tính mi å to đi tng ging mt phn đi tng c. • Tha k cho phép nâng cao kh nng s dng li chng trình. – Không phi biên dch li các thành phn chng trình đã có trong các lp c s. åKhông cn phi có chng trình ngun tng ng: ngi lp trình đc phép tha k các lp đnh ngha trc đó. å Ngi dùng hoàn toàn không th và không cn phi bit rõ phn chng trình ngun tng ng. • Trình dch có th cung cp mt th vin lp, đi tng làm c s đ xây dng giao din ng dng. Bài ging C++. 19/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, HXD 4 7.1 T 7.1 T æ æ ng quan vÒ thõa kÕ v ng quan vÒ thõa kÕ v µ µ ® ® a h a h × × nh nh  7.1.2 a hình trong lp trình hng đi tng – Khái nim • a hình là mt trong ba nguyên tc c bn ca LTHT. – Tính đa hình đc thit lp trên c s tha k. • a hình: đi tng có th có biu hin khác nhau tu thuc tình hung c th. – Tính đa hình có th th hin trên mt hành vi (phng thc ca lp) hoc trên toàn b đi tng. – Tính đa hình cung cp kh nng x lý các lp liên h nhau ca các đi tng theo mt cách tng quát. – nh ngha li hàm thành phn • nh ngha li HTP ca lp c s trong lp dn xut là c s cho vic thit đt tính đa hình. • Phân bit đnh ngha li và đnh ngha chng (xem chng 4 & 6) Bài ging C++. 19/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, HXD 5 7.2 Thõa kÕ 7.2 Thõa kÕ  7.2.1 Tha k lp – Cú pháp đnh ngha tha k class Lop_TK : access Lop_CS { //Khai báo và đnh ngha các thành phn mi [d liu thành phn mi] [hàm thành phn mi] }; – Chú ý: • access: thuc tính tha k – Là mt trong ba thuc tính: public, private, protected. • Lop_CS : lp c s (là lp có trc). • Lop_TK : lp tha k trc tip - lp dn xut (là lp đc đnh ngha trên c s ca lp B). Bài ging C++. 19/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, HXD 6 7.2 Thõa kÕ 7.2 Thõa kÕ  7.2.1 Tha k lp – Thành phn ca lp dn xut • DLTP : lp dn xut tha k tt c DLTP ca lp c s. • HTP : lp dn xut tha k tt c HTP ca lp c s tr hàm to, hàm hy, hàm bn và hàm phép toán gán. – Truy nhp thành phn • Các thành phn private trong lp c s không th truy nhp đc t các lp dn xut (thành phn, hàm bn và đi tng). • HTP ca lp dn xut đc phép truy nhp đn các thành phn protected và public ca lp c s. å Phm vi lp ch m rng cho hàm bn, lp bn mà không đc m rng đn các lp tha k. Bài ging C++. 19/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, HXD 7 7.2 Thõa kÕ 7.2 Thõa kÕ  7.2.1 Tha k lp – Thuc tính tha k • Dn xut public: không thay đi thuc tính ca các thành phn tha k t lp c s. • Dn xut protected: – Thành phn public, protected trong lp c s å thành phn protected trong lp dn xut. – Thành phn private ca lp c s å thành phn private trong lp dn xut. • Dn xut private: – Tt c thành phn ca lp c s (public, protected, private) å thành phn private trong lp dn xut. – Dn xut private đc dùng khi không cn khai báo thêm HTP mi mà ch đnh ngha li các hàm đã có trong lp c s. Bài ging C++. 19/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, HXD 8 7.2 Thõa kÕ 7.2 Thõa kÕ  7.2.1 Tha k lp – nh ngha li thành phn (d liu, hàm) • t tên DLTP trong lp dn xut trùng tên DLTP trong lp c s. – DLTP mi s “che khut” DLTP ca lp c s. – Có th truy nhp ti thành phn trong lp c s theo cú pháp: tên_lp::tên_thành_phn; • nh ngha li hàm thành phn. – Hàm đnh ngha li ging hàm nguyên thy c v tên, tham s và giá tr tr v. – Các hàm này ch khác nhau  v trí: mt hàm nm trong lp dn xut và hàm kia nm trong lp c s. • Tránh đnh ngha chng hàm trong phân cp tha k. – Các hàm trùng tên  lp c s s b “che khut”. Bài ging C++. 19/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, HXD 9 7.2 Thõa kÕ 7.2 Thõa kÕ  7.2.1 Tha k lp – Tính tha k trong lp dn xut • i tng lp dn xut và lp c s. – Mt đi tng ca lp dn xut có th “thay th”mt đi tng ca lp c s å có th chuyn kiu ngm đnh t mt đi tng ca lp dn xut sang mt đi tng ca lp c s. – VD: Lop_TK: dt_tk; Lop_CS: dt_cs = dt_tk; – iu ngc li không đúng nu không đnh ngha chng phép toán gán trên lp c s và lp dn xut. • Con tr, tham chiu lp dn xut và lp c s. – Con tr (tham chiu) lp c s có th tr đn đi tng lp dn xut. – Con tr (tham chiu) lp dn xut không th nhn đa ch (gán giá tr) ca đi tng lp c s (tr trng hp ép kiu). Bài ging C++. 19/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, HXD 7.2 Thõa kÕ 7.2 Thõa kÕ  7.2.2 Hàm to, hàm hy và tính tha k – Hàm to trong lp dn xut • Lp dn xut không th tha k hàm to ca lp c s. • C ch chung gi hàm to ca lp dn xut: – Gi hàm to ca lp c s. å DLTP tha k t lp c s đc khi to trc. – Gi hàm to ca lp dn xut. å Phn còn li ca đi tng đc khi to. • Nh vy, hàm to lp c s luôn đc gi trc khi DLTP trong lp dn xut đc khi to và trc khi thc thi các lnh khác. – C ch trên đc thc hin mt cách ngm đnh, không cn phi gi tng minh hàm to ca lp c s trong hàm to ca lp dn xut. – Trong thc t cng không th thc hin đc vic gi hàm to ca mt lp nào đómt cách tng minh. [...]... khoa CNTT, HXD Bài gi ng C+ + 19/11/2008 7. 4 §a thõa kÕ 7. 4.3 C u tr c d li u å Bài t p l n! ng v i l p – c c c tài li u liên quan – L p trình c i t: • M r ng bài t p l n ch ng 3, s d ng c c ki n th c v l p trình H T (l p, th a k l p, hàm o, l p o…) • C c thao t c x lý trên danh sách liên k t, ng n x p, hàng i, c y và c c c u tr c kh c • C c bài toán trên c u tr c d li u ng (s p x p, tìm ki m, …) • C c. .. h y: ng c l i • M t l p c s c th c th a k nhi u l n trong m t l p d n xu t kh c å xung t th a k – C c ngôn ng u ph i c gi i pháp kh c ph c – C+ + a ra khái ni m th a k o V.S.Nam B/m KTHT, khoa CNTT, HXD Bài gi ng C+ + 19/11/2008 7. 4 §a thõa kÕ 7. 4.2 C i – L pc s t a th a k trong C+ + o • C pháp chung: class Lop_TK1 virtual Lop_CS { }; class Lop_TK2 virtual Lop_CS { }; class Lop_TK3: public Lop_TK1,... t hàm c khai báo bình th ng l p c s nh ng l i c khai báo o l p d n xu t å trình d ch s xem chúng c ki u g n k t kh c nhau • Hàm xu t l pc s c coi là c ki u g n k t t nh, c n hàm c coi là c ki u g n k t ng – L p c s ” và l p “d n xu t” th a k V.S.Nam B/m KTHT, khoa CNTT, HXD ây l pd n c hi u r ng h n, xét trên c y Bài gi ng C+ + 19/11/2008 7. 3 §a h×nh 7. 3.2 C c v n – kh c v hàm o nh ngh a ch ng... m tham chi u it ng nh th nào? • G n k t t nh (s m): x c nh HTP trong quá trình biên d ch – Trong g n k t t nh, vi c g i HTP c x c trình và không thay i trong khi th c thi • G nk t ng (mu n): x c – Trong g n k t trình d a trên c trong ch ng nh HTP trong quá trình th c thi ng, vi c g i HTP i t ng mà con tr V.S.Nam B/m KTHT, khoa CNTT, HXD nh tr c x c nh khi th c thi ch ang ch a a ch Bài gi ng C+ + 19/11/2008... m c dù nó c th kh c v i hàm hu c a l p c s • Gi i pháp cho v n này là khai báo hàm hu o cho l p c s – Khi ó hàm hu c a c c l p d n xu t là o mà không yêu c u chúng ph i c c ng tên Ta g i ây là tính a hình c a hàm o V.S.Nam B/m KTHT, khoa CNTT, HXD Bài gi ng C+ + 19/11/2008 7. 3 §a h×nh 7. 3.2 C c v n kh c v hàm o – Hàm o thu n túy và l p tr u t ng • Hàm o thu n tuý là hàm không c ph n nh ngh a – C ... vi c x c nh l i g i hàm n gi n h n V.S.Nam B/m KTHT, khoa CNTT, HXD Bài gi ng C+ + 19/11/2008 7. 3 §a h×nh 7. 3.2 C c v n – Hàm hu kh c v hàm o o • Hàm t o không th là hàm o, trong khi ó hàm hu thì c th • Xét tr ng h p c c i t ng trong c y th a k c c p phát ng – L c này hàm h y c a l p c s c g i mà không c n bi t n ki u c a i t ng (là i t ng mà con tr tr n), ngoài ra nó c ng không bi t n tên hàm hu c. .. 19/11/2008 7. 2 Thõa kÕ 7. 2.2 Hàm t o, hàm h y và tính th a k – Hàm t o sao chép trong l p d n xu t • Trong nh ngh a c a HTSC l p d n xu t c th mô t b t k hàm t o nào c m t trong l p c s • C pháp chung: Lop_TK(Lop_TK &dt_tk) : Lop_CS(ds_giá_tr ) { // } • C th s d ng m t c ch làm kh c: g i HTSC c a l p c s trong nh ngh a c a HTSC l p d n xu t – C pháp: Lop_TK(Lop_TK &dt_tk) : Lop_CS((Lop_CS &)dt_cs)... t ph i c g i – N u không nh ngh a hàm t o cho l p d n xu t å trình d ch t ng t o ra m t hàm t o ng m nh • Trình t kh i t o DLTP c a it ng l p d n xu t: – t ch cho i t ng (tr ng thái ch a c x c nh c th ) – Hàm t o t ng ng c a l p c s c g i (ng m nh ho c qua danh sách kh i t o c a hàm t o l p d n xu t) – Hàm t o c a l p d n xu t c g i b sung DLTP m i V.S.Nam B/m KTHT, khoa CNTT, HXD Bài gi ng C+ + 19/11/2008... o c a l p d n xu t – C th thay i tham s truy n cho hàm t o l p c s V.S.Nam B/m KTHT, khoa CNTT, HXD nh ngh a Bài gi ng C+ + 19/11/2008 7. 2 Thõa kÕ 7. 2.2 Hàm t o, hàm h y và tính th a k – Hàm t o trong l p d n xu t (ti p) • L i g i t i hàm t o ng m c ch t ng nh c a l p c s c sinh ra m t – N u l p c s không c hàm t o ng m nh, m t trong c c hàm t o c a l p c s trong danh sách kh i t o c a hàm t o c. .. // ho c g n h n: D(D &d) : B(b) } V.S.Nam B/m KTHT, khoa CNTT, HXD Bài gi ng C+ + 19/11/2008 7. 2 Thõa kÕ 7. 2.2 Hàm t o, hàm h y và tính th a k – Hàm h y trong l p d n xu t • L p d n xu t không th th a k hàm h y c a l p c s • C ch chung g i hàm h y: – Khi i t ng thu c l p d n xu t c gi i phóng å c c i t ng thành ph n và c c i t ng th a k t l p c s c ng b gi i phóng theo å hàm h y s c g i n – Ch c n quan . c . • Tha k cho phép nâng cao kh nng s dng li chng trình. – Không phi biên dch li c c thành phn chng trình đã c trong c c lp c s. åKhông c n phi c chng trình ngun tng. lp dn xut đ c khi to và tr c khi th c thi c c lnh kh c. – C ch trên đ c th c hin mt c ch ngm đnh, không c n phi gi tng minh hàm to c a lp c s trong hàm to c a lp dn xut. –. c a lp c s đ c sinh ra mt c ch t đng. – Nu lp c s không c hàm to ngm đnh, mt trong c c hàm to c a lp c s trong danh sách khi to c a hàm to c a lp dn xut phi đc

Ngày đăng: 06/08/2014, 01:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan