Tipos de herencia en C++ ¿Qué debe saber?

Publicado: 2023-04-05

¿Alguna vez te has preguntado cómo se construyen algunos sistemas de software populares? Todo es gracias a un poderoso mecanismo llamado herencia en la programación orientada a objetos (POO). La herencia permite a los programadores crear nuevas clases basadas en las existentes, lo que permite la reutilización del código y el desarrollo eficiente de software. Imagine que está construyendo un sistema que requiere varias clases, cada una de las cuales comparte algunos atributos y comportamientos comunes.

En lugar de escribir el mismo código repetidamente, puede usar la herencia para crear una clase base y derivar nuevas clases de ella, ahorrándole tiempo y esfuerzo.

La herencia no solo es eficiente sino también versátil. En C++, hay varios tipos de herencia, cada uno con beneficios y casos de uso únicos.

En este artículo, daremos un vistazo completo a los diferentes tipos de herencia en C++ , brindando códigos relevantes, explicaciones y ejemplos de la vida real a lo largo del artículo.

Tabla de contenido

Diferentes tipos de herencia en C++

El lenguaje de programación C++ ofrece cinco tipos diferentes de opciones de herencia a sus programadores. Según el contexto y los requisitos, los desarrolladores y programadores pueden trabajar con cualquiera de estos tipos de herencia.

Herencia Única

La herencia simple es el tipo de herencia más común en C++. En herencia simple, una clase derivada hereda de una sola clase base. Esto significa que una clase hereda todos los miembros de datos públicos y protegidos y las funciones de miembro de la clase base mientras tiene la capacidad de agregar sus propios miembros de datos y funciones de miembro.

Consulte el fragmento de código a continuación para obtener la sintaxis y la comprensión de la herencia única:

// Clase base

clase Animal {

público:

anular comer() {

std::cout << “El animal está comiendo” << std::endl;

}

};

// Clase derivada

Perro de clase: Animal público {

público:

ladrido vacío () {

std::cout << “El perro está ladrando” << std::endl;

}

};

En este ejemplo, tenemos una clase base llamada Animal con una función de un solo miembro comer().Luego definimos una clase derivadaDog que hereda públicamente de Animal.Dog también tiene su propia función miembro ladrar().Mediante el uso de herencia simple,Perro puede acceder a la función comer()de laclase Animaly agregar su propio comportamiento con lafunción ladrar().

Cuándo usar herencia única en C++

Los programadores pueden usar la herencia simple para crear una clase derivada que agregue funcionalidad a la clase base.

Por ejemplo, puede utilizar la herencia única al crear un juego en el que participen diferentes personajes, como guerreros, magos y arqueros. Todos estos personajes comparten algunos atributos y comportamientos comunes, como puntos de salud, poder de ataque y velocidad de movimiento. Mediante el uso de la herencia única, puede crear una clase base denominada Carácter que contenga los atributos y comportamientos comunes y derivar cada clase de carácter a partir de ella para agregar su funcionalidad única.

En la herencia múltiple, una clase derivada puede heredar de varias clases base. Esto significa que una clase puede tener más de una clase principal directa. Como resultado, la clase derivada hereda todos los miembros de datos públicos y protegidos y las funciones miembro de cada clase base.

He aquí un ejemplo de herencia múltiple:

// Clase básica 1

forma de clase {

público:

área doble virtual() = 0;

};

// Clase base 2

color de clase {

público:

estándar virtual::cadena getColor() = 0;

};

// Clase derivada

Rectángulo de clase: forma pública, color público {

público:

doble área () invalidar {

retorno ancho * alto;

}

std::string getColor() invalidar {

color de retorno;

}

privado:

doble ancho = 5,0;

doble altura = 3,0;

std::string color = “azul”;

};

En este ejemplo, tenemos dos clases base, Shape y Color , cada una con su función virtual.Luego definimos una clase derivada,Rectangle , que hereda tanto de Shape como de Color.Rectangle anula las funciones virtuales de ambas clases base para proporcionar su propia implementación. Mediante el uso de la herencia múltiple,Rectangle puede heredar las propiedades de ambas clases base, ShapeyColor, para crear un rectángulo con un color y un área específicos.

Cuándo usar herencia múltiple en C++

Utilice la herencia múltiple cuando desee combinar la funcionalidad de varias clases base. Por ejemplo, considere una aplicación GUI que requiere diferentes tipos de controles, como botones, casillas de verificación y cuadros de texto. Cada tipo de control tiene su funcionalidad y comportamiento, pero también comparten algunas funciones comunes, como el manejo de eventos de usuario y la visualización de texto.

Mediante el uso de la herencia múltiple, puede crear una clase base denominadaControl que contenga la funcionalidad común y derivar cada tipo de control de ella, así como otras clases base que contengan su funcionalidad específica.

En la herencia jerárquica, varias clases derivadas heredan una sola clase base. Al igual que la herencia múltiple, las clases derivadas en la herencia jerárquica obtienen todos los miembros de datos públicos y protegidos y las funciones miembro de la clase base.

Aquí hay un fragmento de código para ayudarlo a comprender la implementación de la herencia jerárquica en C++:

// Clase base

clase Animal {

público:

virtual void hacerSonido() = 0;

};

// Clase 1 derivada

gato de clase: animal público {

público:

void hacerSonido() invalidar {

std::cout << “Miau” << std::endl;

}

};

// Clase 2 derivada

Perro de clase: Animal público {

público:

void hacerSonido() invalidar {

std::cout << “Guau” << std::endl;

}

};

En este ejemplo, tenemos una clase base llamada Animal con una función virtual hacerSonido().Luego definimos dos clases derivadas,Gato y Perro, que heredan ambas deAnimal. Cada clase derivada anula la funciónmakeSound() para proporcionar su propia implementación.Usando la herencia jerárquica, podemos crear diferentes tipos de animales que comparten comportamientos comunes, como hacer un sonido.

Cuándo usar la herencia jerárquica en C++

Utilice la herencia jerárquica cuando desee crear varias clases derivadas que compartan una funcionalidad común. Por ejemplo, considere una aplicación bancaria que requiere diferentes tipos de cuentas, como cuentas de ahorro, cuentas corrientes y cuentas de tarjetas de crédito. Todos estos tipos de cuentas comparten algunos atributos y comportamientos comunes, como el número de cuenta, el saldo y la tasa de interés.

Mediante el uso de la herencia jerárquica, puede crear una clase base llamada Cuenta que contiene los atributos y comportamientos comunes y derivar cada tipo de cuenta de ella para agregar su funcionalidad única.

Herencia multinivel

La herencia multinivel en C++ es un tipo de herencia donde una clase derivada es heredada por otra clase derivada. En este escenario, la clase derivada hereda todos los miembros de datos públicos y protegidos y las funciones de miembro de su clase principal inmediata, que a su vez hereda de su propia clase principal, y así sucesivamente.

Así es como puede implementar mediante programación la herencia multinivel en C++:

// Clase base

clase de vehículo {

público:

inicio vacío () {

std::cout << “El vehículo está arrancando” << std::endl;

}

};

// Clase Intermedia

coche de clase: vehículo público {

público:

anular unidad () {

std::cout << “El coche está conduciendo” << std::endl;

}

};

// Clase derivada

clase SportsCar: public Car {

público:

vacío acelerar () {

std::cout << “El auto deportivo está acelerando” << std::endl;

}

};

Cuándo usar herencia multinivel en C++

Utilice la herencia multinivel cuando desee crear una clase derivada que herede de otra clase derivada y agregue su funcionalidad. Por ejemplo, considere un sistema de software que requiera diferentes tipos de vehículos, como automóviles, camiones y motocicletas. Estos tipos de vehículos comparten algunos atributos y comportamientos comunes, como la velocidad, la aceleración y el frenado.

Mediante el uso de la herencia multinivel, puede crear una clase base llamada Vehículo que contiene los atributos y comportamientos comunes y derivar clases intermedias, como AutomóvilyCamión, para agregar su funcionalidad específica. Luego, puede derivar laclase SportsCar de la clase Carpara agregar su funcionalidad única.

La herencia híbrida es una combinación de dos o más tipos de herencia. También conocida como herencia virtual, una clase derivada en herencia híbrida hereda de múltiples clases base, algunas de las cuales se heredan a través de múltiples rutas. Esto puede crear jerarquías de herencia complejas y puede ser difícil de entender y mantener.

Consultelos cursos de desarrollo de software de upGradpara mejorar sus habilidades.

Aquí hay un ejemplo de herencia híbrida en C++:

// Clase básica 1

clase Animal {

público:

virtual void hacerSonido() = 0;

};

// Clase base 2

clase CanFly {

público:

vuelo vacío virtual() = 0;

};

// Clase básica 3

clase puede nadar {

público:

nadar en el vacío virtual() = 0;

};

// Clase derivada

clase Murciélago: Animal público, CanFly público {

público:

void hacerSonido() invalidar {

std::cout << "¡Chirrido!"<< estándar::endl;

}

invalidar volar() anular {

std::cout << “Murciélago está volando” << std::endl;

}

};

// Clase derivada

Clase Pingüino: Animal público, CanSwim público {

público:

void hacerSonido() invalidar {

std::cout << “¡Hooonk!”<< estándar::endl;

}

anular nadar () anular {

std::cout << “El pingüino está nadando” << std::endl;

}

};

Explore nuestros cursos populares de ingeniería de software

Maestría en Ciencias en Ciencias de la Computación de LJMU & IIITB Programa de Certificado de Ciberseguridad Caltech CTME
Bootcamp de desarrollo de pila completa Programa PG en Blockchain
Programa Ejecutivo PG en Desarrollo Full Stack
Ver todos nuestros cursos a continuación
Cursos de ingeniería de software

Cuándo usar herencia híbrida en C++

Además de los cuatro tipos de herencia discutidos anteriormente, la herencia híbrida puede ser útil en ciertos escenarios donde se requieren varios tipos de herencia. Utilice la herencia híbrida para combinar los beneficios de varios tipos de herencia.

Por ejemplo, considere un sistema de software que requiere diferentes tipos de animales, algunos de los cuales pueden volar mientras que otros pueden nadar. Puede usar la herencia híbrida para crear una clase base llamada Animal y derivar dos clases intermedias, CanFlyyCanSwim, a partir de ella. Finalmente, usando la herencia híbrida, puede derivar las clasesMurciélago y Pingüinode ambas clases intermedias. La claseBat heredaría de AnimalyCanFly, mientras que la clasePenguinheredaría deAnimalyCanSwim. De esta manera, puedes crear diferentes tipos de animales con combinaciones únicas de habilidades.

La herencia híbrida en C++ puede ser útil en sistemas de software complejos donde se requieren múltiples tipos de herencia. Sin embargo, también puede crear jerarquías de herencia complejas que pueden ser difíciles de entender y mantener. Al igual que con otros tipos de herencia, es fundamental elegir el tipo correcto para los requisitos específicos de su proyecto de desarrollo de software y los objetivos de diseño.

Lea nuestros artículos populares relacionados con el desarrollo de software

Consulte nuestroscursos de tecnología gratuitos para obtener una ventaja sobre la competencia.

Cosas importantes a tener en cuenta al usar la herencia:

Si bien la herencia es un mecanismo poderoso en C++, también tiene algunos factores a considerar cuando se implementa.

  1. Evite las jerarquías de herencia profunda : las jerarquías de herencia profunda pueden conducir a un código que es difícil de leer, comprender y mantener.Mantenga sus jerarquías de herencia lo más superficiales posible para mejorar la legibilidad y el mantenimiento del código.
  2. Utilice los modificadores de acceso con prudencia: los modificadores de acceso (público, protegido y privado) controlan la visibilidad de los miembros de datos y las funciones de los miembros en una clase.Úselos sabiamente para evitar exponer detalles de implementación que no deberían ser visibles fuera de la clase.
  3. Evite la herencia de diamantes: la herencia de diamantes ocurre cuando una clase hereda de dos clases que heredan de la misma clase base.Esto puede generar ambigüedad y, en general, es mejor evitarlo.
  4. Evite el uso excesivo de la herencia: si bien la herencia puede ser útil, es importante evitar su uso excesivo.En algunos casos, la composición u otros patrones de diseño pueden ser una mejor opción.

Explore nuestros cursos gratuitos de desarrollo de software

Fundamentos de la computación en la nube Conceptos básicos de JavaScript desde cero Estructuras de datos y algoritmos
Tecnología de cadena de bloques Reaccionar para principiantes Fundamentos básicos de Java
Java Node.js para principiantes JavaScript avanzado

Llevar

En resumen, la herencia es un concepto crucial en la programación de C++ que todo estudiante de programación debe dominar. Al comprender los diferentes tipos de herencia y sus casos de uso, puede crear código eficiente, organizado y mantenible, convirtiéndose así en un mejor desarrollador de software.

Si este artículo le pareció interesante, puede mejorar aún más su conocimiento del desarrollo de software inscribiéndose en el Programa de certificación DevOps de upGrad que se ofrece en colaboración con IIIT Bangalore. Este programa cubre varios aspectos del desarrollo de software, incluida la codificación, las pruebas y la implementación, y puede ayudarlo a convertirse en un desarrollador de software calificado en la industria.

¿Por qué la herencia es importante en la programación de C++?

Con la utilización de la herencia, los programadores pueden ahorrar tiempo y esfuerzo en el desarrollo de software para crear sistemas de software complejos de manera organizada. A medida que los programadores trabajan para crear códigos más legibles, el proceso de codificación se simplifica enormemente.

¿Cuáles son las cosas importantes que se deben recordar al usar la herencia en la programación de C++?

Al usar la herencia en la programación de C++, es esencial tener en cuenta algunas cosas cruciales, como evitar jerarquías de herencia profundas, usar modificadores de acceso de manera inteligente, evitar la herencia de diamantes y no abusar de la herencia.

¿Qué tipo de herencia debo usar para mi proyecto de desarrollo de software?

La elección del tipo correcto de herencia depende de los requisitos específicos del proyecto de desarrollo de software y de los objetivos de diseño. La selección de varios tipos de herencia depende completamente de los requisitos de su proyecto. Por lo tanto, haga un análisis detallado antes de continuar con él.