У овом упутству научићемо да користимо јавно, заштићено и приватно наслеђе у Ц ++ уз помоћ примера.
У наслеђивању Ц ++, можемо извести подређену класу из основне класе у различитим режимима приступа. На пример,
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;
Приступачност у приватном наследству
Приступачност | приватни чланови | заштићени чланови | чланови јавности |
---|---|---|---|
Основна класа | да | да | да |
Изведена класа | Не | Да (наслеђено као приватне променљиве) | Да (наслеђено као приватне променљиве) |