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 asaspublicdalam kelas turunan, danprotectedanggota kelas asas tetap beradaprotecteddi kelas turunan. - warisan yang dilindungi menjadikan
publicdanprotectedanggota kelas asasprotecteddalam kelas turunan. - harta pusaka persendirian menjadikan
publicdanprotectedanggota kelas asasprivatedalam 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 diBase.
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,
pubdangetPVT()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) |








