Xem mẫu

  1. SỰ KẾ THỪA
  2. 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
  3. 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
  4. 1.Giới thiệu về sự kế thừa
  5. 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
  6. 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
  7. • 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.
  8. 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)
  9. 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
  10. 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ó.
  11. 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).
  12. 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
  13. 1.2.Ví dụ về sự kế thừa Hình 4.1: Sơ đồ phân cấp kế thừa
  14. 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’.
  15. 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).
  16. 1.2.Ví dụ về sự kế thừa Hình 4.2: Sơ đồ phân cấp kế thừa
  17. 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.
  18. 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.
  19. 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
  20. 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