Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Langue C

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 base public dans la classe dérivée, et le protected les membres de la classe de base restent protected dans la classe dérivée.
  • héritage protégé fait le public et protected membres de la classe de base protected dans la classe dérivée.
  • héritage privé fait le public et protected membres de la classe de base private 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é en Base .

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 et getPVT() 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

  1. Cloud public vs cloud privé vs cloud hybride
  2. Avantages et inconvénients du cloud public
  3. Avantages et inconvénients du cloud privé
  4. Variables, littéraux et constantes C++
  5. Classes et objets C++
  6. Gestion de la mémoire C++ :création et suppression
  7. Fonction amie C++ et classes amies
  8. Structures et classes en C++
  9. Le réseau privé s'appuie sur le réseau public Sigfox