Tài liệu Ngôn ngữ lập trình - Bài 7: Kế thừa - Nguyễn Xuân Hùng: Giảng viên: Nguyễn Xuân Hùng
Mobile: 0908 386 366
Email: nguyenxuanhung@wru.vn
Bài 7: KẾ THỪA
NGÔN NGỮ LẬP TRÌNH
Nguyễn Xuân Hùng – Khoa CNTT – Trường Đại học Thủy Lợi
NỘI DUNG
1. Các kiểu kế thừa.
2. Hàm ảo
3. Lớp trừu tượng và hàm thuần ảo
12/18/20142 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1. Kế thừa
Thừa kế là một quá trình mà một lớp mới (lớp dẫn xuất-derived
class) được tạo ra từ một lớp khác gọi là lớp cơ sở - base
class. Lớp dẫn xuất sẽ tự động có các biến thành viên và tất cả
hàm thành viên của lớp cơ sở, và nó có thể thêm các biến
thành viên và hàm thành viên của chính nó.
Ví dụ: class Student, Doctor, Person
Student, Doctor đều có tên, tuổi, địa chỉ giống như lớp Person
Nhưng nó sẽ có một số biến thành viên khác như: học sinh thêm
thuộc tính môn học, bác sĩ có thêm thuộc tính chuyên môn
Ví dụ: Class Employee, Worker, Manager, Director
4 lớp trên đều có tên, tuổi, địa chỉ
Nhưng một số lớp khác có thêm các đặc tính riêng như:
worker có ...
26 trang |
Chia sẻ: putihuynh11 | Lượt xem: 624 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Ngôn ngữ lập trình - Bài 7: Kế thừa - Nguyễn Xuân Hùng, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Giảng viên: Nguyễn Xuân Hùng
Mobile: 0908 386 366
Email: nguyenxuanhung@wru.vn
Bài 7: KẾ THỪA
NGÔN NGỮ LẬP TRÌNH
Nguyễn Xuân Hùng – Khoa CNTT – Trường Đại học Thủy Lợi
NỘI DUNG
1. Các kiểu kế thừa.
2. Hàm ảo
3. Lớp trừu tượng và hàm thuần ảo
12/18/20142 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1. Kế thừa
Thừa kế là một quá trình mà một lớp mới (lớp dẫn xuất-derived
class) được tạo ra từ một lớp khác gọi là lớp cơ sở - base
class. Lớp dẫn xuất sẽ tự động có các biến thành viên và tất cả
hàm thành viên của lớp cơ sở, và nó có thể thêm các biến
thành viên và hàm thành viên của chính nó.
Ví dụ: class Student, Doctor, Person
Student, Doctor đều có tên, tuổi, địa chỉ giống như lớp Person
Nhưng nó sẽ có một số biến thành viên khác như: học sinh thêm
thuộc tính môn học, bác sĩ có thêm thuộc tính chuyên môn
Ví dụ: Class Employee, Worker, Manager, Director
4 lớp trên đều có tên, tuổi, địa chỉ
Nhưng một số lớp khác có thêm các đặc tính riêng như:
worker có cấp bậc, manager có quản lý phòng nào.
12/18/20143 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1. Kế thừa
Cả 3 lớp trên đều có những hàm và biến giống hệt nhau. Do đó
thay vì tạo ra ba lớp riêng biệt, chúng ta cần tạo một lớp chung
Employee chứa các thông tin chung đó để sử dụng lại.
Ưu điểm: Sử dụng lại mã nguồn giảm mã nguồn viết lại, dễ
dàng bảo trì, sửa đổi về sau, rõ ràng về mặt logic trong thiết kế
chương trình.
12/18/20144 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1. Kế thừa
Kế thừa cho phép lớp con sử dụng các biến và phương
thức của lớp cha, trừ các biến và phương thức mức
private.
12/18/20145 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1. Kế thừa
Cú pháp kết thừa:
class lopcon: lopcha
Ví dụ:
Phạm vi truy cập ở mức kế thừa: public, private
Public: các thành phần public của lớp cha vẫn là public trong lớp con
Private: toàn bộ các thành phần của lớp cha trở thành private của lớp con
12/18/20146 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1. Kế thừa
Kế thừa public:
Các thành viên public của lớp mẹ vẫn là public trong lớp con
Lớp con chuyển kiểu thành lớp mẹ, nhưng ngược lại thì không đúng.
12/18/20147 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1. Kế thừa
Kế thừa private:
Tất cả thành viên trong lớp mẹ đều trở thành private của lớp
con.
12/18/20148 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1. Kế thừa
Thành phần protected: có thể được sử dụng bởi các phương
thức trong lớp dẫn xuất từ nó, nhưng không sử dụng được
ngoài lớp đó.
12/18/20149 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1. Kế thừa
Tổng kết các kiểu kế thừa:
Cột: các kiểu kế thừa
Hàng: phạm vi các biến/hàm thành viên trong lớp cha
Ô: phạm vi các biến/ hàm thành viên trong lớp con.
12/18/201410 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1. Kế thừa
Hàm tạo và hủy trong kế thừa: không được lớp con kế thừa
Mỗi hàm tạo của lớp dẫn xuất phải gọi một hàm tạo của lớp
cha, nếu không sẽ gọi hàm tạo mặc định.
Hàm hủy của lớp sẽ được tự động gọi theo thứ tự ngược lại từ
lớp dẫn xuất tới lớp cơ sở.
12/18/201411 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1. Kế thừa
Gọi hàm tạo của lớp cha: không thể gọi hàm tạo của lớp cha
như gọi hàm thông thường, mà phải gọi ở danh sách khởi tạo.
12/18/201412 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
1. Kế thừa
Định nghĩa lại hàm thành viên:
Một lớp dẫn xuất sẽ kế thừa toàn bộ các hàm thành viên của
lớp cơ sở.
Khi định nghĩa lại bạn phải khai báo và định nghĩa lại trong
lớp dẫn xuất.
Định nghĩa lại so với nạp chồng:
Khác nhau về chữ ký hàm nạp chồng
Ngược lại là định nghĩa lại.
Truy cập đến các hàm của lớp cơ sở đã được định nghĩa
lại:
Sử dụng: toán tử phân giải phạm vi ::
Ví dụ: Employee::print();
12/18/201413 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
2. Hàm ảo
Hai đặc điểm mạnh mẽ nhất của kế thừa đó là khả năng
sử dụng lại mã chương trình và đa hình
Đa hình là ý tưởng “sử dụng một giao diện chung cho
nhiều phương thức khác nhau” dựa trên phương thức ảo
(virtual method).
Nói cách khác: tính đa hình cho phép một thao tác có cách
xử lý khác nhau trên các đối tượng khác nhau.
Ví dụ:
Lớp: Shape, và lớp Rectangle, Circle, Triangle
12/18/201414 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
2. Hàm ảo
Liên kết muộn: khi khai báo một hàm ảo- tức là “không biết
cài đặt như thế nào”, phải đợi khi nó được sử dụng trong
chương trình, và lấy cài đặt từ đối tượng thể hiện liên
kết muộn.
Lưu ý: những thành viên và những hàm tĩnh thì không
được khai báo virtual.
12/18/201415 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
2. Hàm ảo
Thực thi hàm ảo: thêm bổ từ virtual trong khai báo hàm
thành viên.
Ví dụ: hàm bill() trong lớp Sale (trang 216 – Giáo trình tập
2)
12/18/201416 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
2. Hàm ảo
Tham chiếu giữa lớp cơ sở và lớp dẫn xuất:
Tham chiếu thuộc lớp cơ sở có thể trỏ tới đối tượng của lớp
dẫn xuất và có thể truy cập phương thức ảo đã định nghĩa
trong lớp dẫn xuất.
Nếu tham chiếu này trỏ tới đối tượng thuộc lớp cơ sở thì
phương thức ảo của lớp cơ sở được thực hiện.
Nếu tham chiếu này trỏ tới đối tượng của lớp dẫn xuất thì
hàm ảo đã được lớp dẫn xuất định nghĩa lại được thực hiện
Lưu ý: khi khai báo một hàm ảo trong lớp cơ sở, nó sẽ tự
động là ảo trong lớp dẫn xuất. Bạn có thể thêm hoặc bỏ từ
khóa virtual trong lớp dẫn xuất.
Không nhắc lại từ khóa virtual trong định nghĩa hàm thành
viên.
12/18/201417 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
2. Hàm ảo
Ví dụ: Xây dựng lớp DiscountSale kế thừa từ lớp Sale
(trang 214 – Giáo trình tập 2).
12/18/201418 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
2. Hàm ảo
Ví dụ: Xây dựng lớp DiscountSale kế thừa từ lớp Sale
(trang 214 – Giáo trình tập 2).
12/18/201419 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
2. Hàm ảo
Kết luận:
Đa hình: ám chỉ khả năng kết hợp nhiều khả năng thực thi
vào trong một tên hàm bằng cơ chế liên kết muộn. Do đó, đa
hình, liên kết muộn, và hàm ảo thực sự đều cùng một chủ đề
Ghi đè (override): khi định nghĩ hàm ảo bị thay đổi trong lớp
dẫn xuất thì chúng đã bị ghi đè.
Định nghĩa lại (redefinded): nếu hàm không phải là hàm ảo,
thì lớp dẫn xuất viết lại hàm của lớp cơ sở thì hàm đó được
định nghĩa lại.
Ưu điểm: thuận lợi khi thực thi chương trình
Khó khăn: tốn tài nguyên.
12/18/201420 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
3. Lớp trừu tượng và hàm thuần ảo
Hàm thuần ảo:
Một hàm không có thân gọi là hàm thuẩn áo.
Ví dụ:
Lớp trừu tượng:
Một lớp có một hoặc nhiều hàm thuần ảo được gọi là lớp trừu
tượng (abstract class).
Được sử dụng như một lớp cơ sở để dẫn xuất ra lớp khác.
Không thể tạo đối tượng của lớp trừu tượng
12/18/201421 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
3. Lớp trừu tượng và hàm thuần ảo
Ví dụ lớp trừu tượng
12/18/201422 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
3. Lớp trừu tượng và hàm thuần ảo
Con trỏ và hàm ảo
Lớp dẫn xuất có thể được gán cho lớp cơ sở, điều ngược lại
không đúng.
Vấn đề lát cắt (slicing) trong kế thừa.
Ví dụ:
12/18/201423 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
3. Lớp trừu tượng và hàm thuần ảo
Con trỏ và hàm ảo
Để giải quyết vấn đề lát cắt trong kế thừa, hay coi một lớp
dẫn xuất như một lớp cơ sở mà không bị mất thuộc tính của
lớp dẫn xuất, chúng ta có thể sử dụng con trỏ.
Ví dụ:
12/18/201424 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
3. Lớp trừu tượng và hàm thuần ảo
Chuyển kiểu xuống và chuyển kiểu lên:
Chuyển kiểu từ lớp con cháu sang kiểu cha, ông được biết
đến như chuyển kiểu lên.
Ví dụ: vpet = vdog (vpet là đối tượng lớp cha, vdog là đối tượng lớp
con)
Chuyển kiểu từ lớp cha, ông sang lớp con cháu được gọi là
chuyển kiểu xuống và rát nguy hiểm vì giả thiết thông tin đang
được thêm vào.
dynamic_cast được sử dụng cho chuyển kiểu xuống (hoạt động với kiểu
con trỏ) có thể triệt tiêu vấn đề lát cắt nhưng chứa đựng nhiều nguy
hiểm.
Ví dụ:
12/18/201425 Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi
EOF!
12/18/2014Nguyễn Xuân Hùng – Khoa CNTT – ĐH Thủy Lợi26
Các file đính kèm theo tài liệu này:
- nnlt_6_kethua_hamao_1_2209_1993531.pdf