Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- using namespace std;
- class Man;
- class Database;
- class Man {
- private:
- string name, surname;
- int age;
- Man* partner;
- vector<Man*> kids;
- Man* par1;
- Man* par2;
- Database* db;
- Man(string name_, string surname_, Man* par1_, Man* par2_, Database* db_ = nullptr) {
- name = name_;
- surname = surname_;
- age = 0;
- partner = nullptr;
- db = db_;
- if (db != nullptr) {
- db->addMan(this);
- }
- par1 = par1_;
- par2 = par2_;
- }
- public:
- Man() :name("undefined"), surname("undefined"), age(-1), partner(nullptr), db(nullptr), par1(nullptr), par2(nullptr) {}
- Man(string name_, string surname_, int age_,
- Man* partner_ = nullptr, Database* db_ = nullptr,
- Man* par1_ = nullptr, Man* par2_ = nullptr) :
- name(name_), surname(surname_), age(age_),
- partner(partner_), par1(par1_), par2(par2_) {
- if (db_ != nullptr) {
- db = db_;
- db->addMan(this);
- }
- }
- ~Man() {
- if (partner != nullptr) {
- partner->delPartner();
- }
- if (db != nullptr) {
- db->delMan(this);
- }
- if (par1) {
- par1->delKid(this);
- }
- if (par2) {
- par2->delKid(this);
- }
- }
- void giveBirth(string name_) {
- Man* kid = new Man(name_, surname, this, partner, db);
- kids.push_back(kid);
- if (partner != nullptr) {
- partner->addKid(kid, this);
- }
- }
- void addKid(Man* kid, Man* kid_partner) {
- if (partner == kid_partner) {
- kids.push_back(kid);
- }
- }
- void delPartner() {
- partner = nullptr;
- }
- string getName() {
- return name;
- }
- string getSurname() {
- return surname;
- }
- void delKid(Man* kid) {
- for (size_t i = 0; i < kids.size(); ++i) {
- if (kids[i] == kid) {
- kids.erase(kids.begin() + i);
- break;
- }
- }
- }
- void marry(Man* p) {
- partner = p;
- p->setPartner(this);
- }
- void setPartner(Man* p) {
- partner = p;
- }
- };
- class Database {
- private:
- vector<Man*> people;
- public:
- Man* findByName(const string& name, const string& surname) {
- for (size_t i = 0; i < people.size(); ++i) {
- if (people[i]->getName() == name && people[i]->getSurname() == surname) {
- return people[i];
- }
- }
- }
- void addMan(Man* man) {
- people.push_back(man);
- }
- void delMan(Man* man) {
- for (size_t i = 0; i < people.size(); ++i) {
- if (people[i] == man) {
- people.erase(people.begin() + i);
- break;
- }
- }
- }
- };
- int main() {
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement