Fie clasa Cor care are ca atribute numele și numărul de membri. Definiți clasa constructori/destructori Supraîncărcați operatorul de scriere pentru afișarea de obiecte Supraîncărcați operatorii += pentru a crește numărul de membri ai corului Supraîncărcați operatorul < pentru a compara două coruri din peunct de vedere a numărului de membri 1. Definiți clasa constructori/destructori S-a adaugat functia privata init() pentru a evita codul duplicat care apare in constructori si operatorul =. class Cor{ char *nume; int nrMembri; public: Cor(char * = nullptr, int =4); Cor(const Cor&); ~Cor(); Cor& operator=(const Cor&); private: void init(char*, int); }; Deoarece clasa conține un membru de tip pointer numele corului se va supraîncărca și operatorul =. void Cor::init(char * n, int nr){ if (n != NULL){ this->nume = new char[strlen(n)]; strcpy(this->nume, n); }else{ nume = NULL; } this->nrMembri = nr; } Cor::Cor(char * n, int nr){ this->init(n,nr); } Cor::Cor(const Cor&c){ this->init(c.nume, c.nrMembri); } Cor::~Cor(){ if (this->nume != NULL) delete [] this->nume; } Cor& Cor::operator=(const Cor&c){ if (&c==this) return *this; if (this->nume != NULL) delete [] this->nume; this->init(c.nume, c.nrMembri); return *this; } 2. Supraîncărcați operatorul de scriere pentru afișarea de obiecte friend ostream& operator << (ostream &, const Cor&); ostream& operator << (ostream &st, const Cor&c){ st << "Cor[nume: " << c.nume << ", nr membri: " << c.nrMembri << "]"; return st; } 3. Supraîncărcați operatorii += pentru a crește numărul de membri ai corului Cor& operator+=(int); Cor& Cor::operator+=(int x){ this->nrMembri +=x; return *this; } 4. Supraîncărcați operatorul < pentru a compara două coruri din peunct de vedere a numărului de membri friend bool operator <(const Cor&, const Cor&); bool operator <(const Cor&c1, const Cor&c2){ return c1.nrMembri < c2.nrMembri; } 5. Testarea funcționalități int main(){ Cor a("Madrigal", 20); Cor b("Mundi", 100); Cor c; c=a; cout << a << endl;; a+=100; cout << a << endl; if (c