Héritage C++ public, protégé et privé
Héritage C++ public, protégé et privé
Dans ce tutoriel, nous apprendrons à utiliser l'héritage public, protégé et privé en C++ à l'aide d'exemples.
Dans l'héritage C++, nous pouvons dériver une classe enfant de la classe de base dans différents modes d'accès. Par exemple,
class Base {
.... ... ....
};
class Derived : public Base {
.... ... ....
};
Remarquez le mot-clé public dans le code
class Derived : public Base Cela signifie que nous avons créé une classe dérivée de la classe de base en mode public . Alternativement, nous pouvons également dériver des classes dans protected ou privé modes.
Ces 3 mots clés (public , protected , et private ) sont appelés spécificateurs d'accès dans l'héritage C++.
héritage public, protégé et privé en C++
public , protégé, et privé l'héritage ont les caractéristiques suivantes :
- héritage public fait
publicmembres de la classe de basepublicdans la classe dérivée, et leprotectedles membres de la classe de base restentprotecteddans la classe dérivée. - héritage protégé fait le
publicetprotectedmembres de la classe de baseprotecteddans la classe dérivée. - héritage privé fait le
publicetprotectedmembres de la classe de baseprivatedans la classe dérivée.
Remarque : private les membres de la classe de base sont inaccessibles à la classe dérivée.
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
} Exemple 1 :Héritage public C++
// C++ program to demonstrate the working of public inheritance
#include <iostream>
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;
} Sortie
Private = 1 Protected = 2 Public = 3
Ici, nous avons dérivé PublicDerived à partir de Base en mode public .
En conséquence, en PublicDerived :
- protection est hérité comme protégé .
- bar et
getPVT()sont hérités en tant que publics . - pvt est inaccessible car il est privé en
Base.
Depuis privé et protégé les membres ne sont pas accessibles depuis main() , nous devons créer des fonctions publiques getPVT() et getProt() pour y accéder :
// Error: member "Base::pvt" is inaccessible
cout << "Private = " << object1.pvt;
// Error: member "Base::prot" is inaccessible
cout << "Protected = " << object1.prot;
Notez que le getPVT() la fonction a été définie dans Base . Mais le getProt() la fonction a été définie dans PublicDerived .
C'est parce que pvt , qui est privé en Base , est inaccessible à PublicDerived .
Cependant, prot est accessible à PublicDerived en raison de l'héritage public. Donc, getProt() peut accéder à la variable protégée depuis PublicDerived .
Accessibilité dans l'héritage public
| Accessibilité | membres privés | membres protégés | membres publics |
|---|---|---|---|
| Classe de base | Oui | Oui | Oui |
| Classe dérivée | Non | Oui | Oui |
Exemple 2 :Héritage protégé C++
// C++ program to demonstrate the working of protected inheritance
#include <iostream>
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;
}
Sortie
Private cannot be accessed. Protected = 2 Public = 3
Ici, nous avons dérivé ProtectedDerived à partir de Base en mode protégé .
En conséquence, en ProtectedDerived :
- protection , bar et
getPVT()sont hérités comme protégés . pvtest inaccessible car il est privé enBase.
Comme nous le savons, protégé les membres ne sont pas directement accessibles depuis l'extérieur du cours. Par conséquent, nous ne pouvons pas utiliser getPVT() à partir de ProtectedDerived .
C'est aussi pourquoi nous devons créer le getPub() fonction en ProtectedDerived pour accéder au pub variables.
// Error: member "Base::getPVT()" is inaccessible
cout << "Private = " << object1.getPVT();
// Error: member "Base::pub" is inaccessible
cout << "Public = " << object1.pub; Accessibilité dans l'héritage protégé
| Accessibilité | membres privés | membres protégés | membres publics |
|---|---|---|---|
| Classe de base | Oui | Oui | Oui |
| Classe dérivée | Non | Oui | Oui (hérité en tant que variables protégées) |
Exemple 3 :Héritage privé C++
// C++ program to demonstrate the working of private inheritance
#include <iostream>
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;
} Sortie
Private cannot be accessed. Protected = 2 Public = 3
Ici, nous avons dérivé PrivateDerived à partir de Base en mode privé .
Par conséquent, en PrivateDerived :
- protection ,
pubetgetPVT()sont hérités en tant que privés . - pvt est inaccessible car il est privé en
Base.
Comme nous le savons, les membres privés ne sont pas directement accessibles depuis l'extérieur de la classe. Par conséquent, nous ne pouvons pas utiliser getPVT() à partir de PrivateDerived .
C'est aussi pourquoi nous devons créer le getPub() fonction en PrivateDerived pour accéder au pub variables.
// Error: member "Base::getPVT()" is inaccessible
cout << "Private = " << object1.getPVT();
// Error: member "Base::pub" is inaccessible
cout << "Public = " << object1.pub; Accessibilité en héritage privé
| Accessibilité | membres privés | membres protégés | membres publics |
|---|---|---|---|
| Classe de base | Oui | Oui | Oui |
| Classe dérivée | Non | Oui (hérité en tant que variables privées) | Oui (hérité en tant que variables privées) |
Langue C
- Cloud public vs cloud privé vs cloud hybride
- Avantages et inconvénients du cloud public
- Avantages et inconvénients du cloud privé
- Variables, littéraux et constantes C++
- Classes et objets C++
- Gestion de la mémoire C++ :création et suppression
- Fonction amie C++ et classes amies
- Structures et classes en C++
- Le réseau privé s'appuie sur le réseau public Sigfox