Warisan Awam, Dilindungi dan Swasta dalam Pengaturcaraan C ++

Dalam tutorial ini, kita akan belajar menggunakan warisan awam, terlindung dan peribadi di C ++ dengan bantuan contoh.

Dalam warisan C ++, kita dapat memperoleh kelas anak dari kelas asas dalam mod akses yang berbeza. Sebagai contoh,

 class Base (… .… … . ); class Derived : public Base (… .… … . );

Perhatikan kata kunci publicdalam kod

 class Derived : public Base

Ini bermaksud bahawa kita telah membuat kelas turunan dari kelas asas dalam mod awam . Sebagai alternatif, kami juga boleh memperoleh kelas dalam mod terlindung atau peribadi .

Ini 3 kata kunci ( public, protected, dan private) dikenali sebagai specifiers akses dalam pusaka C ++.

harta pusaka awam, terlindung dan peribadi di C ++

harta pusaka awam , dilindungi, dan peribadi mempunyai ciri-ciri berikut:

  • warisan awam menjadikan publicanggota kelas asas publicdalam kelas turunan, dan protectedanggota kelas asas tetap berada protecteddi kelas turunan.
  • warisan yang dilindungi menjadikan publicdan protectedanggota kelas asas protecteddalam kelas turunan.
  • harta pusaka persendirian menjadikan publicdan protectedanggota kelas asas privatedalam kelas turunan.

Catatan: private ahli kelas asas tidak dapat diakses ke 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: Warisan awam C ++

 // 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; )

Pengeluaran

 Peribadi = 1 Dilindungi = 2 Awam = 3

Di sini, kami telah diperolehi PublicDeriveddari Basedalam mod awam .

Hasilnya, dalam PublicDerived:

  • prot diwarisi sebagai dilindungi .
  • pub dan getPVT()diwarisi sebagai orang awam .
  • pvt tidak dapat diakses kerana ia adalah peribadi di Base.

Oleh kerana anggota peribadi dan dilindungi tidak dapat diakses, kita perlu membuat fungsi awam getPVT()dan getProt()mengaksesnya:

 // Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;

Kebolehcapaian dalam Warisan Awam

Kebolehcapaian ahli persendirian anggota yang dilindungi orang awam
Kelas Asas Ya Ya Ya
Kelas Berasal Tidak Ya Ya

Contoh 2: Warisan terlindung 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; )

Pengeluaran

Peribadi tidak dapat diakses. Dilindungi = 2 Awam = 3

Di sini, kami telah diperolehi ProtectedDeriveddari Basedalam mod dilindungi .

Hasilnya, dalam ProtectedDerived:

  • prot, pub dan getPVT()diwarisi sebagai dilindungi .
  • pvttidak dapat diakses kerana ia adalah peribadi di Base.

Seperti yang kita tahu, anggota yang dilindungi tidak dapat diakses secara langsung.

Akibatnya, kita tidak boleh menggunakan getPVT()dari ProtectedDerived. Itulah sebabnya mengapa kita perlu membuat getPub()fungsi ProtectedDeriveduntuk mengakses pembolehubah pub.

 // Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;

Kebolehcapaian dalam Warisan Terlindung

Kebolehcapaian ahli persendirian anggota yang dilindungi orang awam
Kelas Asas Ya Ya Ya
Kelas Berasal Tidak Ya Ya (diwarisi sebagai pemboleh ubah terlindung)

Contoh 3: Warisan peribadi 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; )

Pengeluaran

Peribadi tidak dapat diakses. Dilindungi = 2 Awam = 3

Di sini, kami telah diperolehi PrivateDeriveddari Basedalam mod swasta .

Hasilnya, dalam PrivateDerived:

  • prot, pubdan getPVT()diwarisi sebagai peribadi .
  • pvt tidak dapat diakses kerana ia adalah peribadi di Base.

Seperti yang kita tahu, ahli persendirian tidak dapat diakses secara langsung.

Akibatnya, kita tidak boleh menggunakan getPVT()dari PrivateDerived. Itulah sebabnya mengapa kita perlu membuat getPub()fungsi PrivateDeriveduntuk mengakses pembolehubah pub.

 // Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;

Kebolehcapaian dalam Warisan Swasta

Kebolehcapaian ahli persendirian anggota yang dilindungi orang awam
Kelas Asas Ya Ya Ya
Kelas Berasal Tidak Ya (diwarisi sebagai pemboleh ubah peribadi) Ya (diwarisi sebagai pemboleh ubah peribadi)

Artikel menarik...