Ch −¬ ng 7Thõa kÕ
Trang 27.1 Tæng quan vÒ thõa kÕ vµ ®a h×nh
Trang 37.1 Tæng quan vÒ thõa kÕ vµ ®a h×nh
• 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
Trang 47.1 Tæng quan vÒ thõa kÕ vµ ®a h×nh
Trang 9• 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).
Trang 127.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 đ nh c a l p c s đ c sinh ra m t cách t đ ng.
– Hàm t o c a l p d n xu t đ c g i đ b sung DLTP m i.
Trang 137.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
Trang 14– Ch c n quan tâm t i các DLTP trong l p d n xu t, không c n đ ý
đ n đ i t ng thành ph n và DLTP th a k t l p c s
Trang 15å n y sinh v n đ : xác đ nh HTP c th tu thu c vào th i đi m tham chi u đ i t 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 đ nh tr c trong ch ng trình và không thay đ i trong khi th c thi.
• G n k t đ ng (mu n): xác đ nh HTP trong quá trình th c thi.
– Trong g n k t đ ng, vi c g i HTP đ c xác đ nh khi th c thi ch ng trình d a trên đ i t ng mà con tr đang ch a đ a ch
Trang 187.3 §a h×nh
7.3.1 Hàm o và tính đa hình
– Hàm o trong phân c p l p
• Ph m vi c a khai báo virtual:
– Khi hàm đ c khai báo virtual trong m t l p c s , hàm đó đ c xem nh th hi n c a g n k t đ ng trong l p c s đó và trong t t c các l p d n xu t t nó.
• Có th khai báo hàm o m t l p b t kì trong s đ th a k :
– N u m 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 l p c s đ c coi là có ki u g n k t t nh, còn hàm l p d n
xu t đ c coi là có ki u g n k t đ ng.
– L p “c s ” và l p “d n xu t” đây đ c hi u r ng h n, xét trên cây
th a k
Trang 19trong m t l p d n xu t v i các tham s khác å trình d ch coi hàm
đ nh ngh a ch ng đó là m t hàm hoàn toàn khác, không liên quan gì
đ n hàm o hi n t i å n u nó không đ c khai báo virtual thì nó
có tính ch t g n k t t nh.
– Nói chung, n u đ nh ngh a ch ng hàm o thì t t c các hàm đ nh
ngh a ch ng c a nó nên khai báo là virtual đ vi c xác đ nh l i g i hàm đ n gi n h n.
Trang 20nó 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.
Trang 21– Không th s d ng l p tr u t ng đ khai báo các đ i t ng, nh ng
đ c phép khai báo con tr
– L p tr u t ng là t ng quát hoá c a các l p th a k nó, và ng c l i các l p d n xu t là s c th hoá c a l p tr u t ng.
– M t hàm o thu n tuý khai báo trong m t l p tr u t ng c s ph i
đ c đ nh ngh a l i trong m t l p d n xu t ho c n u không thì ph i
đ c ti p t c khai báo o trong l p d n xu t.
• Lúc này l p d n xu t m i l i là m t l p tr u t ng.
Trang 237.4 §a thõa kÕ
7.4.2 Cài đ t đa th a k trong C++
– L p c s o
• Cú pháp chung:
class Lop_TK1 virtual Lop_CS { };
class Lop_TK2 virtual Lop_CS { };
class Lop_TK3: public Lop_TK1, public Lop_TK2 { };
• Chú ý: khai báo này không nh h ng đ n các l p Lop_TK2 và
Lop_TK3, t c là l p Lop_TK1 s ch xu t hi n m t l n trong các
Trang 24• 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