xuất chỉ tạo ra một bản sao của các thành phần được thừa kế từ lớp cơ sở... Lớp cơ sở ảo[r]
Trang 1Chương 4: Thừa kế
Trang 2Nội dung chính
Thừa kế là gì?
Cài đặt thừa kế
Đa thừa kế
Trang 31 Thừa kế là gì?
C++ cho phép tạo ra một lớp mới từ các lớp
đã tồn tại
Lớp B kế thừa lớp A, có nghĩa là lớp B sẽ có các thuộc tính và phương thức của A, ngoại trừ các thành phần private
Lớp B được gọi là lớp con hay lớp dẫn xuất
Lớp A được gọi là lớp cha hay lớp cơ sở
Trang 4Một số kiểu thừa kế
Trang 5Một số kiểu thừa kế
Trang 6Một số kiểu thừa kế
Trang 72 Cài đặt thừa kế
Cú pháp khai báo lớp dẫn xuất từ một lớp
cơ sở như sau:
class lớp_dẫn_xuất : mức truy nhập lớp_cơ_ sở
Mức truy nhập Thành phần được thừa kế từ lớp cơ sở
public giữ nguyên mức truy nhập
protected chuyển sang mức truy nhập protected
private chuyển sang mức truy nhập private
Trang 8Ví dụ: thừa kế
Lớp Salary thừa kế hai phương thức ShowData() và Salary()
Trong lớp Salary cả hai phương thức này đều có mức truy nhập là protected.
Trang 9Trong hàm tạo của lớp dẫn xuất có thể gọi đến hàm tạo của lớp cơ sở
Trang 10Gán đối tượng của lớp cơ sở bằng lớp dẫn xuất
Sau phép gán, các thành phần chung của hai đối tượng sẽ có giá trị như nhau
Trang 11Gán đối tượng của lớp dẫn xuất bằng lớp cơ sở
Trang 12Chú ý: phải chồng toán tử =
Trang 133 Đa thừa kế
X
A2 A1
B
Trang 14Giải quyết xung đột
Gọi tường minh
Ví dụ lớp X có phương thức x được thừa kế
Lời gọi x từ một đối tượng của lớp B
B b;
b.A1 :: x;
b.A2 :: x;
Sử dụng lớp cơ sở ảo
Trang 15Lớp cơ sở ảo
Lớp cơ sở ảo đảm bảo trong lớp dẫn xuất chỉ tạo ra một bản sao của các thành phần được thừa kế từ lớp cơ sở.
Trang 17Lớp cơ sở ảo
Hàm tạo của lớp cơ sở chỉ được gọi trong
hàm tạo của lớp dẫn xuất trực tiếp từ nó
Hàm tạo của lớp cơ sở ảo thì được gọi ở tất
cả các lớp dẫn xuất nó
Quy tắc như sau:
Hàm tạo của lớp cơ sở ảo được gọi đầu tiên
Tiếp theo đó là hàm tạo của các lớp dẫn xuất trực tiếp