Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

Herencia pública, protegida y privada de C++

Herencia pública, protegida y privada de C++

En este tutorial, aprenderemos a usar la herencia pública, protegida y privada en C++ con la ayuda de ejemplos.

En la herencia de C++, podemos derivar una clase secundaria de la clase base en diferentes modos de acceso. Por ejemplo,

class Base {
.... ... ....
};

class Derived : public Base {
.... ... ....
};

Observe la palabra clave public en el código

class Derived : public Base

Esto significa que hemos creado una clase derivada de la clase base en modo público . Alternativamente, también podemos derivar clases en protegido o privado modos.

Estas 3 palabras clave (public , protected y private ) se conocen como especificadores de acceso en herencia C++.


herencia pública, protegida y privada en C++

público , protegido, y privado la herencia tiene las siguientes características:

Nota: private los miembros de la clase base son inaccesibles para la clase derivada.

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
}

Ejemplo 1:herencia pública de 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;
}

Salida

Private = 1
Protected = 2
Public = 3

Aquí, hemos derivado PublicDerived de Base en modo público .

Como resultado, en PublicDerived :

Desde privado y protegido los miembros no son accesibles desde main() , necesitamos crear funciones públicas getPVT() y getProt() para acceder a ellos:

// Error: member "Base::pvt" is inaccessible
cout << "Private = " << object1.pvt;

// Error: member "Base::prot" is inaccessible
cout << "Protected = " << object1.prot;

Observe que el getPVT() la función ha sido definida dentro de Base . Pero el getProt() la función ha sido definida dentro de PublicDerived .

Esto se debe a que pvt , que es privado en Base , es inaccesible para PublicDerived .

Sin embargo, prot es accesible para PublicDerived por herencia pública. Entonces, getProt() puede acceder a la variable protegida desde PublicDerived .


Accesibilidad en herencia pública

Accesibilidad miembros privados miembros protegidos miembros públicos
Clase base Sí Sí Sí
Clase derivada No Sí Sí

Ejemplo 2:herencia protegida de 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;
}

Salida

Private cannot be accessed.
Protected = 2
Public = 3

Aquí, hemos derivado ProtectedDerived de Base en modo protegido .

Como resultado, en ProtectedDerived :

Como sabemos, protegido no se puede acceder directamente a los miembros desde fuera de la clase. Como resultado, no podemos usar getPVT() de ProtectedDerived .

Por eso también necesitamos crear el getPub() función en ProtectedDerived para acceder al pub variables.

// Error: member "Base::getPVT()" is inaccessible
cout << "Private = " << object1.getPVT();

// Error: member "Base::pub" is inaccessible
cout << "Public = " << object1.pub;

Accesibilidad en herencia protegida

Accesibilidad miembros privados miembros protegidos miembros públicos
Clase base Sí Sí Sí
Clase derivada No Sí Sí (se heredan como variables protegidas)

Ejemplo 3:herencia privada de 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;
}

Salida

Private cannot be accessed.
Protected = 2
Public = 3

Aquí, hemos derivado PrivateDerived de Base en modo privado .

Como resultado, en PrivateDerived :

Como sabemos, no se puede acceder directamente a los miembros privados desde fuera de la clase. Como resultado, no podemos usar getPVT() de PrivateDerived .

Por eso también necesitamos crear el getPub() función en PrivateDerived para acceder al pub variables.

// Error: member "Base::getPVT()" is inaccessible
cout << "Private = " << object1.getPVT();

// Error: member "Base::pub" is inaccessible
cout << "Public = " << object1.pub;

Accesibilidad en herencia privada

Accesibilidad miembros privados miembros protegidos miembros públicos
Clase base Sí Sí Sí
Clase derivada No Sí (se heredan como variables privadas) Sí (se heredan como variables privadas)

Lenguaje C

  1. Nube pública Vs Nube privada Vs Nube híbrida
  2. Ventajas y desventajas de la nube pública
  3. Ventajas y desventajas de la nube privada
  4. Variables, literales y constantes de C++
  5. Clases y objetos de C++
  6. Gestión de memoria C++:nuevo y eliminar
  7. Función amiga de C++ y Clases amigas
  8. Estructuras y clases en C ++
  9. La red de área privada se basa en la red pública de Sigfox
  10. Operadores en C++ con Ejemplo:Qué es, Tipos y Programas
  11. Diferencia entre estructura y clase:explicada con el ejemplo de C++