We have a child class practicante
who inherits from 2 classes: estudiante
and empleado
and both inherits from a grandfather-class persona
. All of them have the method que_eres()
which writes what class is the object (just for an example):
#include <iostream>
using namespace std;
class persona
{
public:
void que_eres() { cout<<"Soy una persona."<<endl; }
};
class estudiante: public persona
{
public:
void que_eres()
{
cout<<"Soy un estudiante."<<endl;
persona::que_eres();
}
};
class empleado: public persona
{
public:
void que_eres()
{
cout<<"Soy un empleado."<<endl;
persona::que_eres();
}
};
class practicante: public estudiante, public empleado
{
public:
void que_eres()
{
estudiante::que_eres();
empleado::que_eres();
}
};
int main()
{
practicante jose;
jose.que_eres();
}
The result is:
Soy un estudiante.
Soy una persona.
Soy un empleado.
Soy una persona.
It's not bad, but it would be better if Soy una persona
were only written once (that is, that the method que_eres()
of the grandfather would be executed just once). Is that possible?
For example, in Python we can do this:
class persona:
def que_eres(self):
print("Soy una persona.")
class estudiante(persona):
def que_eres(self):
print("Soy un estudiante.")
super().que_eres()
class empleado(persona):
def que_eres(self):
print("Soy un empleado.")
super().que_eres()
class practicante(estudiante,empleado):
def que_eres(self):
super().que_eres()
jose = practicante()
jose.que_eres()
And the result is just:
Soy un estudiante.
Soy un empleado.
Soy una persona.