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
Clase derivada No

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
Clase derivada No 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
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++