Skip to content

Protegida

cpp
#include <iostream>
#include <string>

// Clase base
class Animal {
protected:
    std::string name;

public:
    Animal(const std::string& name) : name(name) {}

    void comer() const {
        std::cout << name << " está comiendo." << std::endl;}
    void dormir() const {
        std::cout << name << " está durmiendo." << std::endl;}
};

// Clase derivada (herencia protegida)
class Perro : protected Animal {
private:
    std::string raza;

public:
    Perro(const std::string& name, const std::string& raza) : Animal(name), raza(raza) {}

    void ladrar() const {
        std::cout << "Guau guau!" << std::endl;}

    // Los métodos de la clase base son accesibles internamente en la clase derivada
    // y también por clases derivadas posteriores
    void comerDormirLadrar() const {
        comer();
        dormir();
        ladrar();
    }
};

// Clase derivada de Perro
class Cachorro : public Perro {
public:
    Cachorro(const std::string& name, const std::string& raza) : Perro(name, raza) {}

    // Se puede acceder a los métodos protegidos de la clase base desde la clase derivada
    void jugar() const {
        std::cout << name << " está jugando." << std::endl;}
};

int main() {
    // Crear un objeto de la clase derivada
    Cachorro miCachorro("Buddy", "Labrador");

    // Los métodos de la clase base y clase derivada son accesibles internamente
    miCachorro.comerDormirLadrar();
    miCachorro.jugar();

    return 0;
}