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 public
dalam 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
public
anggota kelas asaspublic
dalam kelas turunan, danprotected
anggota kelas asas tetap beradaprotected
di kelas turunan. - warisan yang dilindungi menjadikan
public
danprotected
anggota kelas asasprotected
dalam kelas turunan. - harta pusaka persendirian menjadikan
public
danprotected
anggota kelas asasprivate
dalam 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 PublicDerived
dari Base
dalam 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 ProtectedDerived
dari Base
dalam mod dilindungi .
Hasilnya, dalam ProtectedDerived
:
- prot, pub dan
getPVT()
diwarisi sebagai dilindungi . pvt
tidak 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 ProtectedDerived
untuk 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 PrivateDerived
dari Base
dalam mod swasta .
Hasilnya, dalam PrivateDerived
:
- prot,
pub
dangetPVT()
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 PrivateDerived
untuk 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) |