Diferencia entre herencia pública, privada y protegida en C++
- Clases base y derivadas en C++
- Herencia pública en C++
- Herencia protegida en C++
- Herencia privada en C++
La herencia es un concepto fundamental en la programación orientada a objetos; le ayuda a ampliar la funcionalidad de una clase. La herencia le permite reutilizar el código ya escrito y probado en una clase y usarlo en otra, ahorrando tiempo, reduciendo errores y simplificando el diseño de su programa.
Se puede hacer referencia a la herencia como una relación es-un
entre clases. Entonces, por ejemplo, si decimos que un automóvil es un automóvil, entonces estamos diciendo que todos los automóviles son automóviles y todos los automóviles son automóviles.
En este artículo, discutiremos los siguientes tres tipos de herencia:
- Herencia Pública
- Herencia privada
- Herencia protegida
Pero, antes de discutir los tipos de herencia, discutiremos el concepto de clases base y derivadas en C++.
Clases base y derivadas en C++
Las clases base y derivadas se utilizan para crear una jerarquía de objetos. La clase original se denomina clase base, mientras que otras clases heredadas se consideran clases derivadas.
La clase base brinda una implementación predeterminada para todos los miembros, que las clases derivadas pueden anular cuando sea necesario.
Una clase derivada puede acceder a todos los miembros no privados de su clase base. Por lo tanto, para evitar que las funciones miembro de las clases derivadas accedan a los miembros de la clase base, esos miembros de la clase base deben hacerse privados en la clase base.
Herencia pública en C++
La herencia pública es un tipo de herencia en la que una clase adquiere las características o propiedades de otra clase. Puede verse como una implementación de la relación es-un
, donde la clase heredera se considera una extensión o especialización de las heredadas.
Cuando una clase se deriva de una clase base pública, los miembros públicos de la clase base se convierten en los miembros públicos de la clase derivada y los miembros protegidos de la clase base se convierten en los miembros protegidos de la clase derivada. Los miembros privados de una clase base nunca son fácilmente accesibles desde una clase derivada, pero se pueden recuperar a través de llamadas a los miembros públicos y protegidos de la clase base.
#include <iostream>
using namespace std;
class Demo {
private:
int x = 56;
protected:
int y = 27;
public:
int z = 67;
int getX() { return x; }
};
class PublicInheritance : public Demo {
public:
int getY() { return y; }
};
int main() {
PublicInheritance sam;
cout << "Private member = " << sam.getX() << endl;
cout << "Protected member= " << sam.getY() << endl;
cout << "Public member= " << sam.z << endl;
return 0;
}
Haga clic aquí para verificar el funcionamiento del código como se mencionó anteriormente.
Herencia protegida en C++
La herencia protegida es una forma de herencia donde la clase base está protegida. Esto significa que la clase derivada tendrá todos los miembros públicos y protegidos de la clase base como miembros protegidos.
Derivar de una clase base protegida tiene sus beneficios en escenarios específicos. Por ejemplo, esta sería una solución adecuada si desea crear un conjunto de clases relacionadas pero no quiere hacerlas públicas porque solo están destinadas para uso interno.
#include <iostream>
using namespace std;
class Demo {
private:
int x = 56;
protected:
int y = 27;
public:
int z = 67;
int getX() { return x; }
};
class ProtectedInheritance : protected Demo {
public:
int getY() { return y; }
int getZ() { return z; }
};
int main() {
ProtectedInheritance sam;
cout << "Protected member= " << sam.getY() << endl;
cout << "Public member= " << sam.getZ() << endl;
return 0;
}
Haga clic aquí para verificar el funcionamiento del código como se mencionó anteriormente.
Herencia privada en C++
La herencia privada es cuando la clase derivada hereda de una clase base privada. Esto significa que cualquier miembro de la clase base pública o protegida se convierte en miembro privado de la clase derivada.
Esto puede ser útil cuando desea crear una subclase que proporcione solo algunas de las características de su superclase.
#include <iostream>
using namespace std;
class Demo {
private:
int x = 56;
protected:
int y = 27;
public:
int z = 67;
int getX() { return x; }
};
class PrivateInheritance : private Demo {
public:
int getY() { return y; }
int getZ() { return z; }
};
int main() {
PrivateInheritance sam;
cout << "Protected member= " << sam.getY() << endl;
cout << "Public member= " << sam.getZ() << endl;
return 0;
}
Haga clic aquí para verificar el funcionamiento del código como se mencionó anteriormente.
Muhammad Adil is a seasoned programmer and writer who has experience in various fields. He has been programming for over 5 years and have always loved the thrill of solving complex problems. He has skilled in PHP, Python, C++, Java, JavaScript, Ruby on Rails, AngularJS, ReactJS, HTML5 and CSS3. He enjoys putting his experience and knowledge into words.
Facebook