C++ OOP từ cơ bản đến nâng cao (Phần 4)
Xin chào các bạn, hôm nay chúng ta lại quay trở lại series lập trình C++ hướng đối tượng từ cơ bản đến nâng cao, ở bài trước chúng ta đã biết khái niệm lớp bạn, hàm bạn rồi. Trong bài hôm nay chúng ta sẽ cùng đi tìm hiểu về Kế Thừa trong C++
Như các bạn đã biết là trong C++ có khoảng 5 loại kế thừa như hình vẽ dưới đây.
Nhưng trong khuôn khổ của bài viết này chúng ta chỉ quan tâm đến kế thừa đơn mà thôi(Tức là con chỉ kế thừa từ một cha)
Đặc tính của kế thừa
- Cho phép định nghĩa lớp mới từ lớp đã có
- Lớp mới gọi là lớp con (subclass) hay lớp dẫn xuất (derivedclass)
- Lớp đã có gọi là lớp cha (superclass) hay lớp cơ sở (baseclass) - Thừa kế cho phép :
- Nhiều lớp có thể dẫn xuất từ một lớp cơ sở
- Một lớp có thể là dẫn xuất của nhiều lớp cơ sở
=> Một cha có nhiều con
- Thừa kế 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
=> Một lớp cha ngoài có con ra còn có cháu - Cú pháp khai báo
class SuperClass{
// Thành phần của lớp cơ sở}class DerivedClass: public/protected/private SuperClass{
// Thành phần bổ xung của lớp dẫn xuất}
Chúng ta sẽ đi làm một ví dụ sau để các bạn dễ hiểu hơn nhé. Chúng ta sẽ cài đặt một ví dụ theo hình bên dưới đây
Như ví dụ trên thì ta viết class Sinh viên kế thừa từ class Người từ đây class Sinh viên có thể truy xuất đến các hàm trong class Người, kết quả sau khi chúng ta chạy chương trình sẽ là
Phạm vi truy xuất
Như các bạn đã biết là khi chúng ta khai báo các thuộc tính trong một class thì chúng ta sẽ có 3 từ khoá là public, private, và protected. Nếu bạn không khai báo thì chương trình sẽ tự hiểu là private
Phạm vi truy xuất sẽ được biểu diễn qua hình vẽ sau
- Qua đó có thể thấy Hàm bạn có thể truy cập tất cả các thuộc tính của lớp cơ sở
- Lớp dẫn xuất hay lớp con chỉ có thể truy cập được các thuộc tính là public hoặc protected
- Các lớp khác thì chỉ có thể truy cập được thuộc tính public
Ta sẽ đi cụ thể từng thuộc tính một nhé:
Thuộc tính public
- Thành phần nào có thuộc tính public thì có thể truy xuất từ bất cứ nơi nào
Thuộc tính private
- Là riêng tư của lớp đó
- Chỉ có hàm thành phần của lớp và ngoại lệ các hàm bạn được truy xuất
- Các lớp con cũng không có quyền truy xuất
Thuộc tính protected
- Cho phép quy định một vài thành phần nào đó của lớp là bảo mật, theo nghĩa thế giới bên ngoài không được phép truy xuất nhưng tất cả các lớp con, cháu... đều được phép truy xuất
- Là cách để tránh phải sửa đổi lớp cơ sở khi có lớp con mới hình thành -> Đảm bảo tính đóng gói
- Thông thường ta dùng thuộc tính protected cho thành phần dữ liệu và public cho thành phần phương thức
- Tóm lại, thành phần có thuọc tính là protected chỉ cho phép những lớp con kế thừa được phép sử dụng