Todo lo que necesita saber sobre la herencia en C ++



Este artículo le proporcionará un conocimiento detallado y completo de la herencia en C ++, sus varios tipos y cómo implementarlo.

C ++ es un lenguaje orientado a objetos. La abstracción de datos, el polimorfismo, la encapsulación y la herencia son las piedras angulares de la programación orientada a objetos. En este post, entenderemos qué es herencia. Tipos de herencia en C ++, y todos los conceptos necesarios relacionados con ella desde cero. Al final, también veremos el inconveniente de este poderoso concepto e intentaremos resolverlo.

¿Qué es la herencia en C ++?

La herencia es uno de los conceptos más poderosos y ampliamente utilizados en C ++ o cualquier otro lenguaje orientado a objetos. Comprender este concepto requiere un poco de conocimiento de clases y objetos. Usando Herencia, podemos crear una clase que consta de métodos y atributos generales. Esta clase puede ser heredada por otras clases que contengan métodos más específicos.





Herencia en C ++

Al hacer esto, no tenemos que escribir las mismas funcionalidades una y otra vez, lo que ahorra tiempo y aumenta la legibilidad del código.



Sintaxis:

clase derivada_clase: access_type base_class {// cuerpo de la clase}

Clase base: La clase que consta de todos los métodos y atributos generales que pueden ser compartidos por otras clases para aumentar la legibilidad del código se llama clase base.

terminar un programa en java

Clase derivada: La clase que consta de métodos más específicos y hereda una clase se llama clase derivada. Una clase derivada también puede ser una clase base para alguna otra clase derivada.



Si creamos una clase XYZ, con algunos atributos y métodos. Ahora, un estudiante de la clase tendrá algunos otros atributos, pero también incluirá los elementos de la clase XYZ y lo mismo ocurre con una clase de profesores. Veamos un diagrama:

Entonces, la clase de estudiantes y profesores heredará de XYZ.

Especificador de acceso Entendimos cómo una clase puede heredar otra clase. Pero algunas personas podrían decir que es un método inseguro ya que todos los atributos y métodos de la clase base o la clase principal se comparten con la clase secundaria o la clase derivada. Por ejemplo, si una clase 'Banco' es heredada por la clase 'clientes' e 'inversores'. Los atributos de la clase 'Banco', como 'contraseña de la bóveda', otra información relacionada con el cliente y datos privados se comparten con la clase 'clientes' y 'inversores', que no son seguros.

Para resolver el problema anterior, C ++ usa especificadores de acceso para limitar el acceso de los atributos de la clase base a la clase derivada. Hay un total de 3 tipos de especificadores de acceso en C ++

  1. Público
  2. Privado
  3. Protegido

La siguiente tabla le dará una buena comprensión de a qué tipo de datos puede acceder la clase derivada de acuerdo con diferentes especificadores de acceso.

Especificador de acceso Datos públicos Datos privados Datos protegidos
Privado No heredadoNo heredadoNo heredado
Protegido Protegido Privado Protegido
Público Público Privado Protegido

Herencia única

La herencia única se puede considerar como la forma simple de herencia. En herencia única, una sola clase hereda de una clase base.

#incluir usando el espacio de nombres std class Train {int Numberofwheels int Numberofcoaches public: void Traininfo (int n, int m) {Numberofwheels = n Numberofcoaches = m} void showinfo () {cout<Este caso de herencia se denomina herencia multinivel. La clase entre la primera y la última clase también se conoce como clase base intermedia.¿Qué piensas, puede la última clase heredar miembros de la primera clase? Sí puede

#incluir usando el espacio de nombres std class First {protected: int a public: void getinfofirst (int x) {a = x} void showinfofirst () {std :: cout<< 'Value of a = ' < 

Salida:

Valor de a = 10

estructuras de datos y algoritmos en java

Valor de b = 20

Valor de c = 30

Valor de d = 50

Herencia jerárquica

Ciertos problemas no se pueden resolver con la ayuda de la herencia de un solo nivel o de varios niveles. En la herencia jerárquica, más de una clase hereda de una única clase base.

#incluir el uso del espacio de nombres std class College {public: College () {cout<< 'We are in class College' << endl } } class Student: public College { } class Faculty: public College { } int main() { Student student Faculty faculty return 0 }

Salida:

Estamos en clase College

Estamos en clase College

Herencia múltiple en C ++

Vimos en la herencia jerárquica que una clase base tenía más de una clase derivada. En herencia múltiple, una clase derivada tiene más de una clase base.

#incluir usando el espacio de nombres std class One {protected: int a public: void getinfoOne (int x) {a = x}} class Two {protected: int b public: void getinfoTwo (int y) {b = y}} class Main: público Uno, público Dos {público: void Display () {estándar :: cout<< 'Value of a = ' < En este punto, tenemos un buen conocimiento de todos los tipos de herencia utilizados en C ++. Pero, espere, ¿qué pasa si queremos usar 2 tipos diferentes de herencia? ¿Es posible? Sí, es posible con la ayuda de la herencia híbrida. En herencia híbrida, combinamos 2 tipos diferentes de herencia. Por ejemplo: herencia multinivel y múltiple, herencia jerárquica y múltiple, etc.

#incluir usando el espacio de nombres std class World {protected: int a public: void getinfoWorld (int x) {a = x}} class Continent: public World {protected: int b public: void getinfoContinent (int y) {b = y}} class Country {protected: int d public: void getinfoCountry (int m) {d = m}} class Australia: public Continent, public Country {public: void Display () {std :: cout<< 'Value of a = ' < 

Entendamos el diagrama anterior que nos ayudará a comprender el problema del diamante. la clase B y la clase C heredan de la clase A, por lo tanto, tanto la clase A como la clase B tienen atributos y métodos de la clase A. Si la clase D hereda de la clase B y la clase C., la clase D tendrá todos los atributos de la clase B y la clase C .También tiene todos los atributos de la clase A heredados de la clase B, así como la clase C., por lo tanto, si hacemos un objeto de la clase D y llamamos a un método de la clase A. se creará una situación ambigua y el compilador se confundirá desde donde debe clase método de A, de clase B o clase D.

java cómo salir del programa

Para resolver esta ambigüedad usamos un concepto llamado clase base virtual. Cuando hacemos que una clase base sea una clase base virtual, solo se hereda una copia de esa clase independientemente del número de rutas existentes entre la clase base virtual y una clase derivada.

clase A {} clase B: público virtual A {} clase C: público virtual A {} clase D: público C, público D {}

Con esto, llegamos al final de este artículo de Herencia en C ++. Si desea obtener más información, consulte el por Edureka, una empresa de aprendizaje en línea de confianza. El curso de certificación y capacitación Java J2EE y SOA de Edureka está diseñado para capacitarlo en conceptos básicos y avanzados de Java junto con varios marcos de Java como Hibernate y Spring.

Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios de este blog y nos pondremos en contacto con usted lo antes posible.