Menu
Coddy logo textTech

Herencia básica

Parte de la sección Programación Orientada a Objetos del Journey de C++ de Coddy — lección 48 de 104.

La herencia permite que una clase adquiera las propiedades y comportamientos de otra clase. La clase de la que se hereda se llama clase base (o padre), y la clase que hereda se llama clase derivada (o hija).

Para crear una clase derivada, use dos puntos seguidos por el especificador de acceso y el nombre de la clase base:

class Animal {
public:
    std::string name;
    
    void eat() {
        std::cout << name << " is eating" << std::endl;
    }
};

class Dog : public Animal {
public:
    void bark() {
        std::cout << name << " says woof!" << std::endl;
    }
};

La clase Dog ahora tiene acceso tanto a name como a eat() de Animal, además de su propio método bark(). Esta es la esencia de la herencia: reutilizar código existente mientras se añade nueva funcionalidad.

Dog myDog;
myDog.name = "Buddy";
myDog.eat();    // Heredado de Animal
myDog.bark();   // Definido en Dog

La palabra clave public antes de Animal especifica el tipo de herencia. La herencia pública significa que los miembros públicos de la clase base permanecen públicos en la clase derivada. Esta es la forma más común y modela una relación "es-un": un Perro es un Animal.

challenge icon

Desafío

Fácil

Vamos a construir una jerarquía de vehículos simple que demuestre la herencia en acción. Crearás una clase base Vehicle y una clase derivada Motorcycle que la extiende con un comportamiento especializado.

Organizarás tu código en tres archivos:

  • Vehicle.h: Define una clase base Vehicle con:
    • Un miembro público std::string brand
    • Un miembro público int year
    • Un método público displayInfo() que imprime la marca y el año del vehículo en el formato: Brand: <brand>, Year: <year>
  • Motorcycle.h: Define una clase Motorcycle que hereda públicamente de Vehicle. Esta clase derivada debe añadir:
    • Un miembro público int engineCC para la cilindrada del motor
    • Un método público revEngine() que imprime: <brand> goes vroom vroom!

    La clase Motorcycle heredará automáticamente brand, year y displayInfo() de Vehicle.

  • main.cpp: Lee tres entradas (cada una en una línea separada):
    1. Nombre de la marca (string)
    2. Año (integer)
    3. CC del motor (integer)

    Crea un objeto Motorcycle, establece sus miembros heredados (brand y year) así como su propio miembro engineCC. Luego produce las tres líneas de salida en orden: primero llama al método heredado displayInfo(), luego imprime tú mismo la cilindrada del motor con std::cout << "Engine: " << moto.engineCC << "cc" << std::endl;, y finalmente llama al método específico de la motocicleta revEngine(). Esto demuestra la herencia al utilizar tanto el método heredado como el método propio de la clase derivada.

    Formato de salida:

    Brand: <brand>, Year: <year>
    Engine: <engineCC>cc
    <brand> goes vroom vroom!

Por ejemplo, con las entradas Harley, 2022 y 1200:

Brand: Harley, Year: 2022
Engine: 1200cc
Harley goes vroom vroom!

No olvides incluir guardas de encabezado (header guards) en tus archivos de cabecera y usar #include "Vehicle.h" en tu encabezado de Motorcycle para acceder a la clase base.

Pruébalo tú mismo

#include <iostream>
#include <string>
#include "Motorcycle.h"

using namespace std;

int main() {
    string brand;
    int year;
    int engineCC;

    cin >> brand;
    cin >> year;
    cin >> engineCC;

    // TODO: Crear un objeto Motorcycle
    // TODO: Establecer sus miembros brand, year y engineCC
    // TODO: Llamar a displayInfo() para mostrar la información heredada
    // TODO: Imprimir la información del motor en el formato: Engine: <engineCC>cc
    // TODO: Llamar a revEngine() para demostrar el comportamiento específico de la motocicleta

    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos