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
public
membres de la classe de basepublic
dans la classe dérivée, et leprotected
les membres de la classe de base restentprotected
dans la classe dérivée. - héritage protégé fait le
public
etprotected
membres de la classe de baseprotected
dans la classe dérivée. - héritage privé fait le
public
etprotected
membres de la classe de baseprivate
dans 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 . pvt
est 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 ,
pub
etgetPVT()
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