Lo prometido es deuda, aca les paso un ejemplo:

# include <iostream>

using namespace std;

enum RAZA { GOLDEN, CAIRN, DANDIE, SHETLAND, DOBERMAN, LAB };

class Mamifero
{
public:
Mamifero();
Mamifero(int edad);
~Mamifero();
int ObtenerEdad() const { return suEdad; }
void AsignarEdad(int edad) { suEdad = edad; }
int ObtenerPeso() const { return suPeso; }
void AsignarPeso(int peso) { suPeso = peso; }
void Hablar() const { cout << “Sonido de Mamifero!\n”; }
void Dormir() const { cout << “Shh. Estoy Durmiendo\n”; }
protected:
int suEdad;
int suPeso;
};

class Perro : public Mamifero
{
public:
Perro();
Perro(int edad);
Perro(int edad, int peso);
Perro(int edad, RAZA raza);
Perro(int edad, int peso, RAZA raza);
~Perro();
RAZA ObtenerRaza() const { return suRaza; }
void AsignarRaza(RAZA raza) { suRaza = raza; }
void MoverCola() const { cout << “Moviendo la cola…\n”; }
void PedirAlimento() const { cout << “Pidiendo Alimento…\n”; }
private:
RAZA suRaza;
};

Mamifero::Mamifero():
suEdad(1),
suPeso(5)
{
cout << “Constructor de Mamifero…\n”;
}

Mamifero::Mamifero(int edad):
suEdad(edad),
suPeso(5)
{
cout << “Constructor de Mamifero(int)…\n”;
}

Mamifero::~Mamifero()
{
cout << “Destructor de Mamifero…\n”;
}

Perro::Perro()
{
cout << “Constructor de Perro…\n”;
}

Perro::Perro(int edad)
{
cout << “Constructor de Perro(int)…\n”;
}

Perro::Perro(int edad, int peso):
Mamifero(edad),
suRaza(GOLDEN)
{
suPeso = peso;
cout << “Constructor de Perro(int, int)…\n”;
}

Perro::Perro(int edad, int peso, RAZA raza):
Mamifero(edad),
suRaza(raza)
{
suPeso = peso;
cout << “Constructor de Perro(int, int, RAZA)…\n”;
}

Perro::Perro(int edad, RAZA raza):
Mamifero(edad),
suRaza(raza)
{
cout << “Constructor de Perro(int, RAZA)…\n”;
}

Perro::~Perro()
{
cout << “Destructor de Perro…\n”;
}

int main()
{
Perro fido;
Perro rover(5);
Perro buster(6, 8);
Perro yorkie(3, GOLDEN);
Perro dobbie(4, 20, DOBERMAN);
fido.Hablar();
rover.MoverCola();
cout << “yorkie tiene “;
cout << yorkie.ObtenerEdad() << ” años de edad.\n”;
cout << “dobbie pesa “;
cout << dobbie.ObtenerPeso() << ” libras\n”;
return 0;
}

Vean que en la clase base se hace una sobrecarga del constructor Mamifero, y luego en la otra clase se hace una sobrecarga del constructor Perro. En Mamifero, se declara el predeterminado y luego otro que tiene la opcion de aceptar la edad. En cambio en Perro tenemos varios, estos son el constructor predeterminado, uno que permite ingresar la edad, otro la edad y el peso, otro la edad, el peso y la raza y un ultimo que permite la edad y la raza. Puede verse tambien como permite el pasaje de argumentos entre la clase derivada y la base. En el programa en si creamos a fido, rover, buster, yorkie y dobbie, cada uno va a utilizar metodos propios de la clase y otros van a usar heredados, por ejemplo fido utiliza un heredado (Hablar) y rover va a utilizar uno propio de la clase (MoverCola), observen como enviamos informacion de cada uno de los objetos creados para la clase derivada hacia la clase base y estos modificaran con la informacion que se comparte a traves del protected (suEdad y suPeso). Espero que les haya sido util.

Anuncios