Tính thừa kế - Class con (subclass)

Tính thừa kết giúp chúng ta tiết kiệm công sức viết code, bằng cách để cho các class con (subclass) thừa hưởng các tính chất của class cha (superclass). Trong bài viết này chúng ta sẽ tìm hiểu về cách triển khai tính thừa kế trong C++.

Định nghĩa subclass

Để định nghĩa subclass, ta sử dụng cú pháp
Trong đó kiểu thừa kế có thể là publicprotected, hoặc private.
Ví dụ: Chương trình sau có 2 class Person và Student, trong đó Student là subclass của Person, do đó Student thừa hưởng hai biến name và age của Person.

Sau khi định nghĩa subclass xong, ta lại có thể tiếp tục định nghĩa subclass của nó nữa. Ví dụ như class NguyenDinhTai sau đây là subclass của Student.



Một object khi thuộc về một class thì cũng sẽ thuộc về tất cả các superclass của class đó. Để dễ hình dung thì “Nếu bạn Nguyễn Đình Tài là sinh viên chắc chắn bạn ấy là người :v”.
Person per = new Student();

Quyền truy cập

Subclass có quyền truy cập tới tất cả các yếu tố public và protected của superclass.

Quyền thừa kế

Quyền truy cập của các yếu tố mà subclass được thừa kế sẽ phụ thuộc vào kiểu thừa kế của subclass đối với superclass.
  • Nếu kiểu thừa kế là public, tất cả các yếu tố public và protected của superclass sẽ giữ nguyên quyền truy cập khi thừa kế xuống subclass.
  • Nếu kiểu thừa kế là protected, tất cả các yếu tố public và protected của superclass sẽ trở thành protected của subclass.
  • Nếu kiểu thừa kế là private, tất cả các yếu tố public và protected của superclass sẽ trở thành private của subclass.
Kiểu thừa kế giống như là việc co gọn quyền truy cập khi xuống tới subclass vậy.
Subclass sẽ không được thừa hưởng các yếu tố sau:
  • constructor, destructor và copy constructor của superclass.
  • Các toán tử đã bị viết đè (overload) ở class cha. Ta sẽ nghiên cứu thêm về overload trong bài viết tiếp theo.

Thừa kế từ nhiều class

Một class trong C++ có thể được thừa kế từ nhiều superclass, chỉ cần liệt kê danh sách các class thừa kế ở trong định nghĩa của nó.
Ví dụ ở trong chương trình sau, class Student được thừa kế từ hai class Person và Hobbies, nên có thể sử dụng được 3 biến age , name, hobby
Kết quả:

Nhận xét

Bài đăng phổ biến từ blog này

[Series] Thuật toán Sinh | Kì hai: Sinh hoán vị

Series Cấu trúc dữ liệu | Stack - Ngăn Xếp

Thuật Toán Interpolation Search - Tìm kiếm nội suy