#include <iostream>
using namespace std;
class persona
{
protected:
virtual string quien_soy(string x=""s) {
const auto s="Soy una persona.\n"s;
auto p=x.find(s);
if (p==string::npos)
x += s;
else {
x = x.substr(0,p)+ x.substr(p+s.size()) +s;
}
return x;
}
public:
void que_eres() { cout<<quien_soy() <<endl; }
virtual ~persona() {}
};
class estudiante: public virtual persona
{
protected:
string quien_soy(string x=""s) override
{
return persona::quien_soy(x+"Soy un estudiante.\n");
}
};
class empleado: public virtual persona
{
protected:
string quien_soy(string x=""s) override
{
return persona::quien_soy(x+"Soy un empleado.\n");
}
};
class practicante: public estudiante, public empleado
{
protected:
string quien_soy(string x=""s) override
{
return empleado::quien_soy(estudiante::quien_soy(x+"Soy un praticante, por consiguiente:\n"));
}
};
int main()
{
practicante jose;
jose.que_eres();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgcGVyc29uYQp7Cglwcm90ZWN0ZWQ6CgkJdmlydHVhbCBzdHJpbmcgcXVpZW5fc295KHN0cmluZyB4PSIicykgewoJCQljb25zdCBhdXRvIHM9IlNveSB1bmEgcGVyc29uYS5cbiJzOyAKCQkJYXV0byBwPXguZmluZChzKTsKICAgIAkJaWYgKHA9PXN0cmluZzo6bnBvcykKICAgIAkJCXggKz0gczsKICAgIAkJZWxzZSB7CiAgICAJCQl4ID0geC5zdWJzdHIoMCxwKSsgeC5zdWJzdHIocCtzLnNpemUoKSkgK3M7CiAgICAJCX0KICAgIAkJcmV0dXJuIHg7CgkJfQogICAgcHVibGljOgogICAgdm9pZCBxdWVfZXJlcygpIHsgY291dDw8cXVpZW5fc295KCkgPDxlbmRsOyB9CiAgICB2aXJ0dWFsIH5wZXJzb25hKCkge30KfTsKCmNsYXNzIGVzdHVkaWFudGU6IHB1YmxpYyB2aXJ0dWFsIHBlcnNvbmEKewogICAgcHJvdGVjdGVkOgogICAgc3RyaW5nIHF1aWVuX3NveShzdHJpbmcgeD0iInMpIG92ZXJyaWRlCiAgICB7CiAgICAgICAgcmV0dXJuIHBlcnNvbmE6OnF1aWVuX3NveSh4KyJTb3kgdW4gZXN0dWRpYW50ZS5cbiIpOwogICAgfQp9OwoKY2xhc3MgZW1wbGVhZG86IHB1YmxpYyB2aXJ0dWFsIHBlcnNvbmEKewoJcHJvdGVjdGVkOgogICAgc3RyaW5nIHF1aWVuX3NveShzdHJpbmcgeD0iInMpIG92ZXJyaWRlCiAgICB7CiAgICAgICAgcmV0dXJuIHBlcnNvbmE6OnF1aWVuX3NveSh4KyJTb3kgdW4gZW1wbGVhZG8uXG4iKTsKICAgIH0KfTsKCmNsYXNzIHByYWN0aWNhbnRlOiBwdWJsaWMgZXN0dWRpYW50ZSwgcHVibGljIGVtcGxlYWRvCnsKCXByb3RlY3RlZDoKICAgIHN0cmluZyBxdWllbl9zb3koc3RyaW5nIHg9IiJzKSBvdmVycmlkZQogICAgewogICAgICAgIHJldHVybiBlbXBsZWFkbzo6cXVpZW5fc295KGVzdHVkaWFudGU6OnF1aWVuX3NveSh4KyJTb3kgdW4gcHJhdGljYW50ZSwgcG9yIGNvbnNpZ3VpZW50ZTpcbiIpKTsKICAgIH0KfTsKCmludCBtYWluKCkKewogICAgcHJhY3RpY2FudGUgam9zZTsKICAgIGpvc2UucXVlX2VyZXMoKTsKfQ==