#include <iostream>
#include <cstring>
#include <string>
using namespace std;
enum class Gender : unsigned char
{
Unrelated = 0,
Male,
Female,
};
inline string GetnderToStr( Gender gender )
{
const char* gender_strings[] = { "unrelated", "male", "female" };
return { gender_strings[ static_cast<unsigned char>( gender ) ] };
};
struct Person
{
string m_name;
string m_surname;
int m_age;
Gender m_gender;
};
struct Adult : Person
{
string m_work_place;
Person* m_spouse = nullptr;
std::string GetDescription();
};
std::string Adult::GetDescription()
{
string description = m_surname + " " + m_name + ", " + std::to_string( m_age ) + " years old, " + GetnderToStr( m_gender );
if( m_spouse == nullptr )
{
description += ", single";
}
else
{
description += ", married on " + m_spouse->m_name + " " + m_spouse->m_surname;
}
if( !m_work_place.empty() )
{
description += ", " + m_work_place;
}
else
{
description += ", unworked";
}
return description;
}
int main()
{
Adult neo;
neo.m_name = "Thomas";
neo.m_surname = "Anderson";
neo.m_age = 30;
neo.m_gender = Gender::Male;
neo.m_work_place = "Metacortex";
std::cout << neo.GetDescription();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPHN0cmluZz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgplbnVtIGNsYXNzIEdlbmRlciA6IHVuc2lnbmVkIGNoYXIKewoJVW5yZWxhdGVkCT0gMCwKCU1hbGUsCglGZW1hbGUsCn07CgppbmxpbmUgc3RyaW5nIEdldG5kZXJUb1N0ciggR2VuZGVyIGdlbmRlciApCnsKCWNvbnN0IGNoYXIqIGdlbmRlcl9zdHJpbmdzW10gPSB7ICJ1bnJlbGF0ZWQiLCAibWFsZSIsICJmZW1hbGUiIH07CglyZXR1cm4geyBnZW5kZXJfc3RyaW5nc1sgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oIGdlbmRlciApIF0gfTsKfTsKCnN0cnVjdCBQZXJzb24KewoJc3RyaW5nCW1fbmFtZTsKCXN0cmluZwltX3N1cm5hbWU7CglpbnQJCW1fYWdlOwoJR2VuZGVyCW1fZ2VuZGVyOwp9OwoKc3RydWN0IEFkdWx0IDogUGVyc29uCnsKCXN0cmluZwltX3dvcmtfcGxhY2U7CglQZXJzb24qCW1fc3BvdXNlCQk9IG51bGxwdHI7CgkKCXN0ZDo6c3RyaW5nIEdldERlc2NyaXB0aW9uKCk7Cn07CgpzdGQ6OnN0cmluZyBBZHVsdDo6R2V0RGVzY3JpcHRpb24oKQp7CglzdHJpbmcgZGVzY3JpcHRpb24gPSBtX3N1cm5hbWUgKyAiICIgKyBtX25hbWUgKyAiLCAiICsgc3RkOjp0b19zdHJpbmcoIG1fYWdlICkgKyAiIHllYXJzIG9sZCwgIiArIEdldG5kZXJUb1N0ciggbV9nZW5kZXIgKTsKCQoJaWYoIG1fc3BvdXNlID09IG51bGxwdHIgKQoJewoJCWRlc2NyaXB0aW9uICs9ICIsIHNpbmdsZSI7Cgl9CgllbHNlCgl7CgkJZGVzY3JpcHRpb24gKz0gIiwgbWFycmllZCBvbiAiICsgbV9zcG91c2UtPm1fbmFtZSArICIgIiArIG1fc3BvdXNlLT5tX3N1cm5hbWU7Cgl9CgkKCWlmKCAhbV93b3JrX3BsYWNlLmVtcHR5KCkgKQoJewoJCWRlc2NyaXB0aW9uICs9ICIsICIgKyBtX3dvcmtfcGxhY2U7Cgl9CgllbHNlCgl7CgkJZGVzY3JpcHRpb24gKz0gIiwgdW53b3JrZWQiOwoJfQoJCglyZXR1cm4gZGVzY3JpcHRpb247Cn0KCmludCBtYWluKCkKewogICAgQWR1bHQgbmVvOwoJCgluZW8ubV9uYW1lCQkJPSAiVGhvbWFzIjsKCW5lby5tX3N1cm5hbWUJCT0gIkFuZGVyc29uIjsKCW5lby5tX2FnZQkJCT0gMzA7CgluZW8ubV9nZW5kZXIJCT0gR2VuZGVyOjpNYWxlOwoJbmVvLm1fd29ya19wbGFjZQk9ICJNZXRhY29ydGV4IjsKICAgIAogICAgc3RkOjpjb3V0IDw8IG5lby5HZXREZXNjcmlwdGlvbigpOwogICAgcmV0dXJuIDA7Cn0K