Dalam tutorial ini, kita akan belajar menggunakan warisan publik, dilindungi, dan pribadi dalam C ++ dengan bantuan contoh.
Dalam pewarisan C ++, kita bisa mendapatkan kelas anak dari kelas dasar dalam mode akses yang berbeda. Sebagai contoh,
class Base (… .… … . ); class Derived : public Base (… .… … . );
Perhatikan kata kunci publicdalam kode tersebut
class Derived : public Base
Ini berarti kita telah membuat kelas turunan dari kelas dasar dalam mode publik . Alternatifnya, kita juga bisa menurunkan kelas dalam mode terproteksi atau pribadi .
3 kata kunci ini ( public,, protecteddan private) dikenal sebagai penentu akses dalam warisan C ++.
warisan publik, dilindungi dan pribadi di C ++
warisan publik , dilindungi, dan pribadi memiliki beberapa fitur berikut:
- Warisan publik membuat
publicanggota kelas dasarpublicdi kelas turunan, danprotectedanggota kelas dasar tetap beradaprotecteddi kelas turunan. - warisan yang dilindungi membuat
publicdanprotectedanggota kelas dasarprotecteddi kelas turunan. - private inheritance membuat anggota
publicdanprotecteddari kelas dasarprivatedi kelas turunan.
Catatan: private anggota kelas dasar tidak dapat diakses oleh kelas turunan.
class Base ( public: int x; protected: int y; private: int z; ); class PublicDerived: public Base ( // x is public // y is protected // z is not accessible from PublicDerived ); class ProtectedDerived: protected Base ( // x is protected // y is protected // z is not accessible from ProtectedDerived ); class PrivateDerived: private Base ( // x is private // y is private // z is not accessible from PrivateDerived )
Contoh 1: C ++ public Inheritance
// C++ program to demonstrate the working of public inheritance #include 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; )
Keluaran
Pribadi = 1 Dilindungi = 2 Publik = 3
Di sini, kami berasal PublicDeriveddari Basedalam mode publik .
Hasilnya, di PublicDerived:
- prot diwarisi sebagai dilindungi .
- pub dan
getPVT()diwarisi sebagai publik . - pvt tidak dapat diakses karena merupakan pribadi di
Base.
Karena anggota pribadi dan dilindungi tidak dapat diakses, kita perlu membuat fungsi publik getPVT()dan getProt()mengaksesnya:
// Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;
Aksesibilitas dalam Warisan Publik
| Aksesibilitas | anggota pribadi | anggota yang dilindungi | anggota publik |
|---|---|---|---|
| Kelas Dasar | Iya | Iya | Iya |
| Kelas Turunan | Tidak | Iya | Iya |
Contoh 2: Warisan yang dilindungi C ++
// C++ program to demonstrate the working of protected inheritance #include 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; )
Keluaran
Pribadi tidak dapat diakses. Dilindungi = 2 Publik = 3
Di sini, kami berasal ProtectedDeriveddari Basedalam mode dilindungi .
Hasilnya, di ProtectedDerived:
- prot, pub dan
getPVT()diwarisi sebagai dilindungi . pvttidak dapat diakses karena merupakan pribadi diBase.
Seperti kita ketahui, anggota yang dilindungi tidak dapat diakses secara langsung.
Akibatnya, kami tidak dapat menggunakan getPVT()dari ProtectedDerived. Itu juga mengapa kita perlu membuat getPub()fungsi ProtectedDeriveduntuk mengakses variabel pub.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Aksesibilitas dalam Warisan yang Dilindungi
| Aksesibilitas | anggota pribadi | anggota yang dilindungi | anggota publik |
|---|---|---|---|
| Kelas Dasar | Iya | Iya | Iya |
| Kelas Turunan | Tidak | Iya | Ya (diwarisi sebagai variabel yang dilindungi) |
Contoh 3: Warisan pribadi C ++
// C++ program to demonstrate the working of private inheritance #include 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; )
Keluaran
Pribadi tidak dapat diakses. Dilindungi = 2 Publik = 3
Di sini, kami berasal PrivateDeriveddari Basedalam mode privat .
Hasilnya, di PrivateDerived:
- prot,
pubdangetPVT()diwarisi sebagai pribadi . - pvt tidak dapat diakses karena merupakan pribadi di
Base.
Seperti kita ketahui, private member tidak bisa diakses secara langsung.
Akibatnya, kami tidak dapat menggunakan getPVT()dari PrivateDerived. Itu juga mengapa kita perlu membuat getPub()fungsi PrivateDeriveduntuk mengakses variabel pub.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Aksesibilitas dalam Warisan Pribadi
| Aksesibilitas | anggota pribadi | anggota yang dilindungi | anggota publik |
|---|---|---|---|
| Kelas Dasar | Iya | Iya | Iya |
| Kelas Turunan | Tidak | Ya (diwarisi sebagai variabel pribadi) | Ya (diwarisi sebagai variabel pribadi) |







