Јавно, заштићено и приватно наслеђе у програмирању на Ц ++

У овом упутству научићемо да користимо јавно, заштићено и приватно наслеђе у Ц ++ уз помоћ примера.

У наслеђивању Ц ++, можемо извести подређену класу из основне класе у различитим режимима приступа. На пример,

 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;

Приступачност у приватном наследству

Приступачност приватни чланови заштићени чланови чланови јавности
Основна класа да да да
Изведена класа Не Да (наслеђено као приватне променљиве) Да (наслеђено као приватне променљиве)

Занимљиви Чланци...