C/C++

Создать структуру для описания членов вашей семьи

Задание
Создать структуру для описания членов вашей семьи (бабушка, дедушка, тетя, брат – на ваше усмотрение). Структура должна описывать – имя, возраст, профессию и тд (на ваше усмотрение), и содержать как минимум 5 полей.

а) создать массив и положить туда созданные используя структуры элементы (минимум 4 штуки) – 25 баллов
б) написать функцию для вывода детальной информации о каждом элементе структуры – 25 баллов
в) написать функцию для вывода самого взрослого/старого члена семьи (выводить должны имя) – 25 баллов
г) написать функцию для сортировки элементов массива по возрасту (для особо одаренных – тот же самый массив) – 25 баллов
д) написать функцию для вывода на экран обладателя самого длинного имени – 25 баллов
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
using Age = unsigned short;
class Name : public string {};
class Status : public string {};
class Profession : public string {};
class Education : public string {};
struct Relative {
Age age;
Name name;
Status status;
Profession profession;
Education education;
Relative() : age(0) {}
Relative(const Age age,
const Name& name,
const Status& status,
const Profession& profession,
const Education& education) :
age(age),
name(name),
status(status),
profession(profession),
education(education)
{}
friend bool operator<(const Relative& a, const Relative& b) {
return a.age < b.age;
}
friend bool operator>(const Relative& a, const Relative& b) {
return a.age > b.age;
}
friend ostream& operator<<(ostream& out, const Relative& rel) {
out << rel.status << ' ' << rel.name;
if (!rel.education.empty()) out << ", образование " << rel.education;
if (!rel.profession.empty()) out << ", профессия - " << rel.profession;
out << ", возраст: " << rel.age;
return out;
}
};
class Family {
public:
Family(initializer_list<Relative> lst) : rels(lst.begin(), lst.end()) {}
Name old()const {
return max_element(rels.begin(), rels.end())->name;
}
Name longest()const {
auto cmp = [](const Relative& a, const Relative& b) {
return a.name.length() < b.name.length();
};
return max_element(rels.begin(), rels.end(), cmp)->name;
}
void sort_age() {
sort(rels.begin(), rels.end());
}
void show_all()const {
for (auto& person : rels) cout << person << '\n';
}
private:
vector<Relative> rels;
};
int main() {
system("chcp 1251 > nul");
Family ivanoff{
Relative{Age{67}, Name{"Галина"}, Status{"бабушка"}, Profession{"швея"}, Education{"среднее специальное"}},
Relative{Age{71}, Name{"Фёдор"}, Status{"дедушка"}, Profession{"каменщик"}, Education{"среднее"}},
Relative{Age{23}, Name{"Александр"}, Status{"сын"}, Profession{"бухгалтер"}, Education{"высшее"}},
Relative{Age{47}, Name{"Нина"}, Status{"мать"}, Profession{"юрист"}, Education{"высшее"}},
Relative{Age{54}, Name{"Алексей"}, Status{"отец"}, Profession{"произвдитель работ"}, Education{"среднее техническое"}}
};
ivanoff.sort_age();
ivanoff.show_all();
puts("");
cout << "Самое длинное имя: " << ivanoff.longest() << '\n';
cout << "Самый пожилой: " << ivanoff.old() << '\n';
system("pause > nul");
}
Владимир Соколов
Владимир Соколов
97 295
Лучший ответ