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 siguen siendo públicos en la clase derivada. Esta es la forma más común y modela una relación «es-un»: un Dog es un Animal.

challenge icon

Desafío

Fácil

Construyamos una jerarquía sencilla de vehículos 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 con el formato: Brand: <brand>, Year: <year>
  • Motorcycle.h: Define una clase Motorcycle que hereda públicamente de Vehicle. Esta clase derivada debe agregar:
    • 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 (cadena)
    2. Año (entero)
    3. Cilindrada del motor (entero)

    Crea un objeto Motorcycle y establece sus miembros heredados (brand y year), así como su propio miembro engineCC. Después, 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 mediante el uso tanto del método heredado como del 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 protectores de inclusión en tus archivos de encabezado y usar #include "Vehicle.h" en el encabezado de tu motocicleta 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

Practica por tu cuenta: Compilador de C++ online