В этом руководстве мы научимся использовать публичное, защищенное и частное наследование в C ++ с помощью примеров.
В наследовании C ++ мы можем получить дочерний класс от базового класса в разных режимах доступа. Например,
class Base (… .… … . ); class Derived : public Base (… .… … . );
Обратите внимание на ключевое слово publicв коде
class Derived : public Base
Это означает, что мы создали производный класс от базового класса в общедоступном режиме . В качестве альтернативы мы также можем создавать классы в защищенном или частном режиме.
Эти 3 ключевых слова ( public, protectedи private) известны как спецификаторы доступа в наследовании C ++.
публичное, защищенное и частное наследование в C ++
публичное , защищенное и частное наследование имеют следующие особенности:
- публичное наследование делает
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 ++
// 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:
- prot наследуется как protected .
- pub и
getPVT()унаследованы как public . - pvt недоступен, так как он является частным в
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 ++
// 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:
- prot, pub и
getPVT()наследуются как protected . pvtнедоступен, так как он частный вBase.
Как мы знаем, к защищенным членам нельзя получить доступ напрямую.
В результате мы не можем использовать getPVT()from ProtectedDerived. Вот почему нам нужно создать getPub()функцию ProtectedDerived, чтобы получить доступ к переменной pub.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Доступность в защищенном наследовании
| Доступность | частные члены | защищенные члены | общественные члены |
|---|---|---|---|
| Базовый класс | да | да | да |
| Производный класс | Нет | да | Да (наследуются как защищенные переменные) |
Пример 3: частное наследование 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; )
Вывод
Доступ к частному недоступен. Защищено = 2 Общедоступно = 3
Здесь мы получили PrivateDerivedот Baseв частном режиме .
В результате в PrivateDerived:
- prot
pubиgetPVT()наследуются как частные . - pvt недоступен, так как он является частным в
Base.
Как мы знаем, к закрытым членам нельзя получить доступ напрямую.
В результате мы не можем использовать getPVT()from PrivateDerived. Вот почему нам нужно создать getPub()функцию PrivateDerived, чтобы получить доступ к переменной pub.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Доступность в частном наследовании
| Доступность | частные члены | защищенные члены | общественные члены |
|---|---|---|---|
| Базовый класс | да | да | да |
| Производный класс | Нет | Да (наследуется как частные переменные) | Да (наследуется как частные переменные) |








