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 public
dalam 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
,, protected
dan 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
public
anggota kelas dasarpublic
di kelas turunan, danprotected
anggota kelas dasar tetap beradaprotected
di kelas turunan. - warisan yang dilindungi membuat
public
danprotected
anggota kelas dasarprotected
di kelas turunan. - private inheritance membuat anggota
public
danprotected
dari kelas dasarprivate
di 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 PublicDerived
dari Base
dalam 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 ProtectedDerived
dari Base
dalam mode dilindungi .
Hasilnya, di ProtectedDerived
:
- prot, pub dan
getPVT()
diwarisi sebagai dilindungi . pvt
tidak 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 ProtectedDerived
untuk 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 PrivateDerived
dari Base
dalam mode privat .
Hasilnya, di PrivateDerived
:
- prot,
pub
dangetPVT()
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 PrivateDerived
untuk 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) |