Lo prometido es deuda, aca les paso un ejemplo:

herencia03.cpp

# 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), si lo compilamos y ejecutamos obtendremos la siguiente salida:

tinchicus@dbn001dsk:~/lenguaje/c++$ ./herencia03
Constructor de Mamifero…
Constructor de Perro…
Constructor de Mamifero…
Constructor de Perro(int)…
Constructor de Mamifero(int)…
Constructor de Perro(int, int)…
Constructor de Mamifero(int)…
Constructor de Perro(int, RAZA)…
Constructor de Mamifero(int)…
Constructor de Perro(int, int, RAZA)…
Sonido de Mamifero!
Moviendo la cola…
yorkie tiene 3 años de edad.
dobbie pesa 20 libras
Destructor de Perro…
Destructor de Mamifero…
Destructor de Perro…
Destructor de Mamifero…
Destructor de Perro…
Destructor de Mamifero…
Destructor de Perro…
Destructor de Mamifero…
Destructor de Perro…
Destructor de Mamifero…
tinchicus@dbn001dsk:~/lenguaje/c++$

En este caso vemos como se llamo a los distintos constructores, vemos como fido llamo a Hablar de la clase Base, rover llamo a MoverCola y por ultimo recuperamos la edad y peso de yorkie y dobbie respectivamente, por ultimo vemos como se llamo a cada uno de los destructores de los objetos creados, espero les haya sido util sigueme en Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.