Kế thừa trong lập trình hướng đối tượng cho phép chúng ta tái sử dụng mã nguồn và xây dựng các lớp con dựa trên các lớp cha. Khi kế thừa, chúng ta có thể sử dụng các dẫn xuất khác nhau như public, protected, và private. Hãy tìm hiểu về cách các dẫn xuất này hoạt động trong C++.
Contents[hide]
Kế thừa public có đặc điểm:
Bạn đang xem: Dẫn xuất public, protected, private trong kế thừa và minh họa với C++
Kế thừa protected có đặc điểm:
Kế thừa private có đặc điểm:
Lưu ý: Các thành phần private của lớp cơ sở luôn không thể truy cập trong lớp dẫn xuất.
#include <iostream>
using namespace std;
class Base {
private:
int pvt = 1;
protected:
int prot = 2;
public:
int pub = 3;
// function to access private member
int getPVT() {
return pvt;
}
};
class PublicDerived : public Base {
public:
// function to access protected member from Base
int getProt() {
return prot;
}
};
int main() {
PublicDerived object1;
cout << "Private = " << object1.getPVT() << endl;
cout << "Protected = " << object1.getProt() << endl;
cout << "Public = " << object1.pub << endl;
return 0;
}
Kết quả:
Private = 1
Protected = 2
Public = 3
Xem thêm : Bài viết
Lớp PublicDerived kế thừa public từ lớp Base. Khi đó, prot trở thành thành phần protected, pub và getPVT() trở thành thành phần public của lớp PublicDerived. pvt không được truy cập trong lớp PublicDerive bởi nó là thành phần private trong lớp Base.
Các thành phần private và protected của lớp không thể truy cập trong hàm main(). Chúng ta cần tạo các hàm public là getPVT() và getProt() để truy cập chúng.
Lưu ý: Hàm getPVT() được định nghĩa trong lớp Base còn hàm getProt() được định nghĩa trong lớp PublicDerived.
pvt là thành phần private trong Base và không thể truy cập trong PublicDerived. Các đối tượng của lớp PublicDerived chỉ có thể truy cập pvt thông qua hàm getPVT() được định nghĩa trong lớp Base và được kế thừa qua cho lớp PublicDerived.
prot có thể được truy cập bởi lớp PublicDerived vì kế thừa với dẫn xuất public. Vì thế, hàm getProt() có thể truy cập biến protected prot trong PublicDerived.
#include <iostream>
using namespace std;
class Base {
private:
int pvt = 1;
protected:
int prot = 2;
public:
int pub = 3;
// function to access private member
int getPVT() {
return pvt;
}
};
class ProtectedDerived : protected Base {
public:
// function to access protected member from Base
int getProt() {
return prot;
}
// function to access public member from Base
int getPub() {
return pub;
}
};
int main() {
ProtectedDerived object1;
cout << "Private cannot be accessed." << endl;
cout << "Protected = " << object1.getProt() << endl;
cout << "Public = " << object1.getPub() << endl;
return 0;
}
Kết quả:
Private cannot be accessed.
Protected = 2
Public = 3
Xem thêm : Bài 1: Bootstrap 5 là gì? Bắt đầu như thế nào?
Lớp ProtectedDerived kế thừa protected từ lớp Base. Khi đó, lớp ProtectedDerived sẽ có:
Đó cũng là lý do cần tạo hàm getPub() để truy cập biến pub trong lớp ProtectedDerived.
#include <iostream>
using namespace std;
class Base {
private:
int pvt = 1;
protected:
int prot = 2;
public:
int pub = 3;
// function to access private member
int getPVT() {
return pvt;
}
};
class PrivateDerived : private Base {
public:
// function to access protected member from Base
int getProt() {
return prot;
}
// function to access private member
int getPub() {
return pub;
}
};
int main() {
PrivateDerived object1;
cout << "Private cannot be accessed." << endl;
cout << "Protected = " << object1.getProt() << endl;
cout << "Public = " << object1.getPub() << endl;
return 0;
}
Kết quả:
Private cannot be accessed.
Protected = 2
Public = 3
Lớp PrivateDerived kế thừa private từ lớp Base. Khi đó, lớp PrivateDerived sẽ có:
Đó cũng là lý do cần tạo hàm getPub() để truy cập biến pub trong lớp PrivateDerived.
Tài liệu tham khảo: C++ Public, Protected and Private Inheritance.
Nguồn: https://laptrinhc.edu.vn
Danh mục: Tài liệu IT
This post was last modified on Tháng Năm 2, 2024 2:57 chiều
Ngành công nghệ ô tô là gì? Đây là một trong những lĩnh vực đang…
Hiện nay, trong thời đại số, việc thiết kế website đã trở nên vô cùng…
JavaScript là một trong những ngôn ngữ lập trình phổ biến nhất thế giới. Đối…
Để lựa chọn một đơn vị thiết kế website uy tín trong số hàng ngàn…
Bạn đang muốn tạo ra một trang web bán hàng chuyên nghiệp để mở rộng…
Bạn có tự hỏi tại sao một bài viết về Machine Learning, Deep Learning lại…