Xem mẫu
- SỰ KẾ THỪA
- Nội dung chương 4
1.Giới thiệu về sự kế thừa (Inheritance)
1.1.Khái niệm
1.2.Ví dụ
1.3.Lợi ích của sự kế thừa
1.4.Chương trình minh họa
2. Kế thừa đơn (Single Inheritance)
2.1.Khái niệm
2.2.Ví dụ
2.3.Phương thức thiết lập và hủy bỏ
2.4.Sự tự động kế thừa các đặc tính lớp cha
2.5.Định nghĩa lại thao tác ở lớp con
2.6.Ràng buộc ngữ nghĩa ở lớp con
- Nội dung chương 4
2.7.Phạm vi truy xuất
2.7.1.Truy xuất theo chiều dọc
2.7.2.Truy xuất theo chiều ngang
2.8.Con trỏ và sự kế thừa
3. Giới thiệu về đa kế thừa (Multiple Inheritance)
3.1.Khái niệm
3.2.Một số vấn đề
3.3.Ví dụ
3.4.Chương trình minh họa
- 1.Giới thiệu về sự kế thừa
- 1.1.Khái niệm về sự kế thừa
• Kế thừa cho phép ta định nghĩa một lớp mới, gọi
là lớp con (subclass) hay lớp dẫn xuất (derived
class) từ một lớp đã có, gọi là lớp cha
(superclass) hay lớp cơ sở (base class).
• 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,
bao hàm cả việc làm “tốt hơn” hoặc làm lại những công
việc mà trong lớp cơ sở chưa làm tốt hoặc không còn
phù hợp với lớp dẫn xuất
- 1.1.Khái niệm về sự kế thừa
• Kế thừa cho phép nhiều lớp có thể dẫn xuất từ
một lớp cơ sở
• Kế thừa cũng cho phép một lớp có thể là dẫn
xuất của nhiều lớp cơ sở
• Kế thừa không chỉ giới hạn ở một mức: Một lớp
dẫn xuất có thể là lớp cơ sở cho các lớp dẫn
xuất khác
- • Khai báo
class A : public B {
//...
};
• Ví dụ:
class SinhVien : public Nguoi {
//...
};
Cho biết lớp Sinh Viên kế thừa từ lớp Người. Khi
đó Sinh Viên được thừa hưởng các đặc tính của
lớp Người.
- 1.1.Khái niệm về sự kế thừa
Dùng kế thừa cho việc:
- Chuyên biệt hóa/ thu hẹp (specialization/
restriction)
VD: Một hình tròn ‘là một’ hình ellipse ->
hình tròn kế thừa từ hình ellipse (chuyên
biệt hóa/ thu hẹp)
- Khái quát hóa/ mở rộng (generalization/
extension)
- 1.1.Khái niệm về sự kế thừa
• Thủ tục và hàm là cơ chế trừu tượng hóa cho
giải thuật, record và struct là trừu tượng hóa cho
dữ liệu. Khái niệm lớp, kết hợp dữ liệu và thủ
tục để được kiểu dữ liệu trừu tượng và giao diện
độc lập với cài đặt cho người sử dụng cảm giác
thoải mái như kiểu dữ liệu có sẵn
- 1.1.Khái niệm về sự kế thừa
• Sự kế thừa là một mức cao hơn của trừu tượng
hóa, cung cấp một cơ chế gom chung các lớp có
liên quan với nhau thành một mức khái quát hóa
đặc trưng cho toàn bộ các lớp nói trên.
• Các lớp với các đặc điểm tương tự nhau có thể
được tổ chức thành một sơ đồ phân cấp kế thừa.
Lớp ở trên cùng là trừu tượng hóa của toàn bộ
các lớp ở bên dưới nó.
- 1.2.Ví dụ về sự kế thừa
Ví dụ 1:
• Xét hai khái niệm người và sinh viên với mối
quan hệ tự nhiên: một 'sinh viên' là một 'người'.
Ta có thể biểu diễn khái niệm trên, một sinh viên
là một người có thêm một số thông tin và một số
thao tác (riêng biệt của sinh viên).
- 1.2.Ví dụ về sự kế thừa
• Ta tổ chức lớp sinh viên kế thừa từ lớp người.
Lớp người được gọi là lớp cha (superclass) hay
lớp cơ sở (base class). Lớp sinh viên được gọi là
lớp con (subclass) hay lớp dẫn xuất (derived
class).
• Ngoài ra, ta có thể tổ chức 2 lớp nam sinh và lớp
nữ sinh là 2 lớp con (lớp dẫn xuất) của lớp sinh
viên. Trường hợp này, lớp sinh viên trở thành lớp
cha (lớp cơ sở) của 2 lớp này
- 1.2.Ví dụ về sự kế thừa
Hình 4.1: Sơ đồ phân cấp kế thừa
- 1.2.Ví dụ về sự kế thừa
Ví dụ 2:
• Xét các khái niệm tam giác cân, tam giác vuông
và tam giác vuông cân với mối quan hệ tự nhiên:
một ‘tam giác vuông cân' là một ‘tam giác vuông‘,
ngoài ra, một ‘tam giác vuông cân’ cũng là một
‘tam giác cân’.
- 1.2.Ví dụ về sự kế thừa
• Ta tổ chức lớp tam giác vuông cân kế thừa từ 2
lớp tam giác vuông và tam giác cân. Lớp tam giác
vuông và lớp tam giác cân được gọi là lớp cha
(superclass) hay lớp cơ sở (base class). Lớp tam
giác vuông cân được gọi là lớp con (subclass)
hay lớp dẫn xuất (derived class).
- 1.2.Ví dụ về sự kế thừa
Hình 4.2: Sơ đồ phân cấp kế thừa
- 1.3.Lợi ích của sự kế thừa
• Kế thừa tạo khả năng xây dựng lớp mới từ lớp
đã có, trong đó hàm thành phần được thừa
hưởng từ lớp cha. Trong C++, kế thừa còn định
nghĩa sự tương thích, nhờ đó ta có cơ chế
chuyển kiểu tự động.
- 1.3.Lợi ích của sự kế thừa
• Kế thừa vừa có khả năng tạo cơ chế khái quát
hoá vừa có khả năng chuyên biệt hoá.
• Kế thừa cho phép tổ chức các lớp chia sẻ mã
chương trình chung nhờ vậy có thể dễ dàng sửa
chữa, nâng cấp hệ thống.
- 1.4.Chương trình minh hoạ
class Nguoi {
friend class SinhVien;
char *HoTen;
int NamSinh;
public:
Nguoi(char *ht, int ns):NamSinh(ns)
{HoTen=strdup(ht);}
~Nguoi() {delete [] HoTen;}
void An() const { cout
- 1.4.Chương trình minh hoạ
class SinhVien : public Nguoi {
char *MaSo;
public:
SinhVien(char *ht, char *ms, int ns) :
Nguoi(ht,ns) { MaSo = strdup(ms);
}
~SinhVien() {delete [] MaSo;}
void Xuat() const;
};
ostream& operator
nguon tai.lieu . vn