У овом упутству научићемо да користимо јавно, заштићено и приватно наслеђе у Ц ++ уз помоћ примера.
У наслеђивању Ц ++, можемо извести подређену класу из основне класе у различитим режимима приступа. На пример,
class Base (… .… … . ); class Derived : public Base (… .… … . );
Обратите пажњу на кључну реч publicу коду
class Derived : public Base
То значи да смо креирали изведену класу од основне класе у јавном режиму . Алтернативно, класе такође можемо изводити у заштићеним или приватним режимима.
Ове 3 кључне речи ( public, protectedи private) су познати као приступ спецификатори у Ц ++ наслеђивања.
јавно, заштићено и приватно наследство на језику Ц ++
јавно , заштићено и приватно наследство имају следеће карактеристике:
- јавно наслеђивање чини
publicчланове основне класеpublicу изведеној класи, аprotectedчланови основне класе остајуprotectedу изведеној класи. - заштићено наслеђе чини
publicиprotectedчланове основне класеprotectedу изведеној класи. - приватно наслеђивање чини
publicиprotectedчланове основне класеprivateу изведеној класи.
Напомена: private припадници основне класе су неприступачни изведеној класи.
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 )
Пример 1: Јавно наслеђивање Ц ++
// 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; )
Оутпут
Приватно = 1 Заштићено = 2 Јавно = 3
Овде смо изведени PublicDerivedиз Baseу јавном режиму .
Као резултат, у PublicDerived:
- прот се наслеђује као заштићен .
- кафана и
getPVT()наслеђују се као јавни . - пвт је неприступачан јер је приватни у
Base.
Будући да приватни и заштићени чланови нису доступни, морамо да креирамо јавне функције getPVT()и getProt()да им приступамо:
// Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;
Приступачност у јавном наслеђивању
| Приступачност | приватни чланови | заштићени чланови | чланови јавности |
|---|---|---|---|
| Основна класа | да | да | да |
| Изведена класа | Не | да | да |
Пример 2: Наслеђивање заштићено Ц ++
// 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; )
Оутпут
Не може се приступити приватном. Заштићено = 2 Јавно = 3
Овде смо извели ProtectedDerivedиз Baseу заштићеном режиму .
Као резултат, у ProtectedDerived:
- прот, пуб и
getPVT()наслеђују се као заштићени . pvtје неприступачна јер је приватна уBase.
Као што знамо, заштићеним члановима није могуће директно приступити.
Као резултат, не можемо да користимо getPVT()од ProtectedDerived. Због тога такође треба да креирамо getPub()функцију ProtectedDerivedда бисмо приступили променљивој пуб.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Приступачност у заштићеном наслеђу
| Приступачност | приватни чланови | заштићени чланови | чланови јавности |
|---|---|---|---|
| Основна класа | да | да | да |
| Изведена класа | Не | да | Да (наслеђено као заштићене променљиве) |
Пример 3: приватно наслеђивање Ц ++
// 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; )
Оутпут
Не може се приступити приватном. Заштићено = 2 Јавно = 3
Овде смо изведени PrivateDerivedиз Baseу приватном режиму .
Као резултат, у PrivateDerived:
- прот,
pubаgetPVT()наслеђују се као приватни . - пвт је неприступачан јер је приватни у
Base.
Као што знамо, приватним члановима није могуће директно приступити.
Као резултат, не можемо да користимо getPVT()од PrivateDerived. Због тога такође треба да креирамо getPub()функцију PrivateDerivedда бисмо приступили променљивој пуб.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Приступачност у приватном наследству
| Приступачност | приватни чланови | заштићени чланови | чланови јавности |
|---|---|---|---|
| Основна класа | да | да | да |
| Изведена класа | Не | Да (наслеђено као приватне променљиве) | Да (наслеђено као приватне променљиве) |








