Herencia simple y múltiple
Modele relaciones «es un» con herencia simple y controle las dificultades de la herencia múltiple.
Herencia simple y múltiple es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué es la herencia?
La herencia permite que una clase (la clase derivada) reutilice y amplíe otra (la clase base). Modela relaciones de tipo «es-un».
class Animal {
public:
void breathe() { std::cout << "breathing\n"; }
};
class Dog : public Animal {
public:
void bark() { std::cout << "Woof!\n"; }
};Herencia pública
Utilice public para modelar una relación «es-un»: un Dog es un Animal. Los miembros conservan su nivel de acceso en la clase derivada.
Herencia protegida y privada
La herencia protected y private modela una relación de tipo «se implementa en términos de», por lo que se utiliza rara vez. Prefiera la composición en esos casos.
Acceso a los miembros de la clase base
La clase derivada puede utilizar directamente cualquier miembro público o protegido de la clase base.
Dog d;
d.breathe(); // inherited from Animal
d.bark(); // own memberOrden de los constructores
Los constructores de la clase base se ejecutan antes que los de la clase derivada. Utilice la lista de inicializadores de miembros para pasar argumentos a la clase base.
class Pet : public Animal {
std::string name_;
public:
Pet(std::string n) : Animal(), name_(std::move(n)) {}
};Orden de los destructores
Los destructores se ejecutan en orden inverso: primero el de la clase derivada y después el de la clase base. Haga que los destructores de la clase base sean virtual si elimina objetos mediante un puntero a la clase base.
Herencia múltiple
C++ permite que una clase herede de más de una clase base. Utilícela con moderación, ya que complica el diseño.
class Printable { public: virtual void print() = 0; };
class Serializable { public: virtual std::string serialize() = 0; };
class Document : public Printable, public Serializable {
// implements both interfaces
};El problema del diamante
Si dos clases base comparten una clase base común, la clase derivada termina teniendo dos copias de esa clase base. Resuélvalo mediante herencia virtual.
class A {};
class B : virtual public A {};
class C : virtual public A {};
class D : public B, public C {}; // D has ONE A, not twoCoste de la herencia virtual
Las clases base virtuales añaden sobrecarga: un puntero adicional por objeto y una indirección adicional en cada acceso a un miembro de la clase base. Evítelas cuando sea posible.
Composición frente a herencia
A menudo, la composición «tiene-un» es más sencilla que la herencia «es-un». Un Car tiene un Engine; no herede Car de Engine.
class Engine { /* ... */ };
class Car {
Engine engine_; // composition
};Herencia de interfaz frente a herencia de implementación
Hay dos usos habituales:
- Interfaz: derive de una clase base con funciones puramente virtuales para cumplir un contrato
- Implementación: derive para reutilizar código (CRTP, mixins)
Cuándo utilizar la herencia
Utilice la herencia cuando:
- Exista una relación real de tipo «es-un»
- Necesite polimorfismo en tiempo de ejecución mediante funciones virtuales
- La clase base esté diseñada para la herencia
Comprobación rápida
¿Qué técnica evita que haya dos copias de una clase base común cuando se utiliza herencia múltiple?
Resumen
La herencia modela relaciones «es-un» mediante herencia pública. La herencia múltiple está permitida, pero el problema del diamante requiere herencia virtual. Prefiera la composición para las relaciones «tiene-un» y la reutilización de código.
Preguntas frecuentes
¿La lección «Herencia simple y múltiple» es gratis?
Sí — el texto completo de «Herencia simple y múltiple» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Herencia simple y múltiple»?
Modele relaciones «es un» con herencia simple y controle las dificultades de la herencia múltiple. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C++ Academy?
No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Herencia simple y múltiple»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C++ Academy?
Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Herencia simple y múltiple
- Funciones virtuales y la vtable
- Clases abstractas y métodos virtuales puros
- Herencia frente a composición: ventajas y desventajas