fork download
  1. #include <iostream>
  2. #include <cstring>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. enum class Gender : unsigned char
  8. {
  9. Unrelated = 0,
  10. Male,
  11. Female,
  12. };
  13.  
  14. inline string GetnderToStr( Gender gender )
  15. {
  16. const char* gender_strings[] = { "unrelated", "male", "female" };
  17. return { gender_strings[ static_cast<unsigned char>( gender ) ] };
  18. };
  19.  
  20. struct Person
  21. {
  22. string m_name;
  23. string m_surname;
  24. int m_age;
  25. Gender m_gender;
  26. };
  27.  
  28. struct Adult : Person
  29. {
  30. string m_work_place;
  31. Person* m_spouse = nullptr;
  32.  
  33. std::string GetDescription();
  34. };
  35.  
  36. std::string Adult::GetDescription()
  37. {
  38. string description = m_surname + " " + m_name + ", " + std::to_string( m_age ) + " years old, " + GetnderToStr( m_gender );
  39.  
  40. if( m_spouse == nullptr )
  41. {
  42. description += ", single";
  43. }
  44. else
  45. {
  46. description += ", married on " + m_spouse->m_name + " " + m_spouse->m_surname;
  47. }
  48.  
  49. if( !m_work_place.empty() )
  50. {
  51. description += ", " + m_work_place;
  52. }
  53. else
  54. {
  55. description += ", unworked";
  56. }
  57.  
  58. return description;
  59. }
  60.  
  61. int main()
  62. {
  63. Adult neo;
  64.  
  65. neo.m_name = "Thomas";
  66. neo.m_surname = "Anderson";
  67. neo.m_age = 30;
  68. neo.m_gender = Gender::Male;
  69. neo.m_work_place = "Metacortex";
  70.  
  71. std::cout << neo.GetDescription();
  72. return 0;
  73. }
  74.  
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
Anderson Thomas, 30 years old, male, single, Metacortex