1
BÀI THỰC HÀNH TUẦN 6
Nội dung:
Tính đa hình trong C++
Qui định nôp bài tập:
- Mỗi bài tp tương ng vi 1 project, tên Project là BaiXX, vi XX là thtự ca bài
tập (Ví dụ bài tp 1 tên Project tương ng là Bai02).
- Tất cả các bài tp đưc đặt bên trong mt thư mc, tên thư mc theo qui đnh như
sau: BTH6_HoVaTen_MSSV. Ví dụ Sinh viên Nguyễn Sơn Trà có MSSV là
19521269 thì đặt tên thư mc như sau: BTH6_NguyenSonTra_19521269
- Sau đó nén thư mc trên thành tp tin .zip hoặc .rar (tên file nén cũng theo qui đnh
như tên thư mc). Ví dụ BTH6_NguyenSonTra_19521269.rar
- Lưu ý xóa thư mục được phát sinh sau khi biên dịch (thư mục Debug, .vs) của
mỗi project
- Hình thc np bài: Np trên website môn hc theo thi gian qui đnh.
- Những bài np không đúng qui định như trên sẽ không được chấm điểm (0
điểm)
- Tất cả các bài làm có tính chất sao chép (copy) sẽ nhận 0 điểm
2
1. Tính cht đa hình trong lp trình hưng đi tưng
a. Liên kết tĩnh, liên kết đng và phương thc ảo
Trong quan hkế tha, bên cnh vic to trc tiếp mt đi tượng cth, ta có thsử
dụng biến con trđể lưu trữ đối tượng cn to. Cơ chế trong quan hệ kế tha cho phép
tạo mt biến con trỏ có kiu dliu là lớp cha, trỏ đến đi tượng kiu lp con
o Xem dụ sau, ta quan hệ giữa heo, o động vật quan hệ kế thừa, trong
đó con heo, con mèo kế thừa từ lớp động vật.
3
Dựa trên tính cht cho phép trđến nhng lp con trong quan h kế tha, ta có thsử
dụng np chng hàm (function overloading) để cài đt mã ngun thao tác trên đi tượng
của lp cha vn có thchy được cho đi tượng ca lp con, tuy nhiên cn kết hp vi
nh đa hình.
o Lưu ý: chcho phép biến con trkiểu dữ liệu lớp cha trđến đối tượng lớp
con chkhông được phép làm ngược li : biến con trỏ có kiu dliu lp con
không được phép trỏ đến đi tượng lp cha
Trong ví dụ trên, ta có ththy khi biến con trmang kiu dliu ca lp cha (lp
Động Vt) trđến đi tượng lp con (con mèo, con heo), khi gi phương thc np
chng (tiếng kêu) thì đều gi li phương thc này lớp cha !!! Đây chính là liên kết
nh.
Để có thể gọi được đúng phương thc ca đi tượng mà con trđang trỏ đến, cn phi
i đt chế liên kết đng cho phương thc lớp cha, bng cách thêm tkhóa
virtual
o Phương thc nào được cài đt liên kết đng bng cách thêm tkhóa virtual được
gọi là phương thc o hay hàm ảo
Phương thc o hay hàm o mang nh cht đa hình:
o Sử dụng con trkiu thuc lp cha: Trđến đi tượng thuc lp con nào
thì gọi hàm hay phương thc ca lp con đó tương ng
Để cài đặt một phương thức hay thuộc tính mang tính đa hình:
o Cần phi có quan hkế tha, cn phi sdụng biến con trvới kiu lớp cha,
trỏ đến đi tượng lp con
o c đnh phương thc nào cn đa hình, thêm tkhóa virtual cho phương thc
đó ở lớp cha
o Lớp con cài đt np chng phương thc đó (không thêm virtual phương thc
của lp con, có ththêm nếu kế tha nhiu tng !!!)
4
i đt tính kế tha kết hp vi đa hình giúp chương trình viết ngn hơn, mang
nh tổng quát đng thi có khả năng mở rộng, tùy biến linh hoạt
Xem xét ví dụ về khả năng mở rộng và viết mã ngun ngn hơn :
o Gisử ta cn cài đt hàm đphát ra tiếng kêu ca bt kđộng vt nào
truyn vào
§ Nếu không cài đt đa hình : cn cài thêm xriêng cho mi lp
con thêm mi vào do chưa biết cthđộng vt truyn vào là động
vật gì.
§ Nếu có i đt đa hình : không cn cài x riêng cho mi lp con,
lớp con khi thêm mi đã tự i đt sn np chng phương thc đa
nh.
o Minh ha mã ngun cho c2 cách cài đt :
5
b. Phương thc thun o, hàm thun o (pure virtual) và lp tru
ng (abstract class)
Khi cài đt kế tha và đa hình, thường có xu hướng đưa nhng cái chung lên ở lớp cha
i đt xlinh hot lớp con. Do đó, lp cha thường skhông có ý nghĩa ng
dụng trong thc tế, vy không nên to ra đối tượng ca lp cha.
o Lớp con heo, con mèo đu kế tha tlớp đng vt. Ta không thto đi tượng
cho lp đng vt do lp này mang ý nghĩa tru tượng (chưa xác đnh được đng
vật này tên gọi là gì,tiếng kêu như thế nào ?) mà phải tạo đối tượng cụ thể là
con heo hay con mèo.
o ch xtốt hơn: lớp cha phương thc o chỉ có khai báo, không có phn cài
đặt
c phương thc o chỉ có khai báo và không có phn cài đt được gi là phương thc
thun o (hay hàm thun o pure virtual method), cài đt bng vic gán virtual = 0
Lớp nào có cha phương thc thun o được gi là lớp tru tượng.
c lp con kế tha tlớp tru tượng bt buc phi cài li toàn bc phương
thc thun o có khai báo ở lớp cha