Warisan Publik, Dilindungi, dan Pribadi dalam Pemrograman C ++

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 dasar publicdi kelas turunan, dan protectedanggota kelas dasar tetap berada protecteddi kelas turunan.
  • warisan yang dilindungi membuat publicdan protectedanggota kelas dasar protecteddi kelas turunan.
  • private inheritance membuat anggota publicdan protecteddari kelas dasar privatedi 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 di Base.

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, pubdan getPVT()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)

Artikel yang menarik...