Facebook
From eu, 2 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 64
  1. Fie clasa Cor care are ca atribute numele și numărul de membri.
  2.  
  3. Definiți clasa constructori/destructori
  4. Supraîncărcați operatorul de scriere pentru afișarea de obiecte
  5. Supraîncărcați operatorii += pentru a crește numărul de membri ai corului
  6. Supraîncărcați operatorul < pentru a compara două coruri din peunct de vedere a numărului de membri
  7. 1. Definiți clasa constructori/destructori
  8. S-a adaugat functia privata init() pentru a evita codul duplicat care apare in constructori si operatorul =.
  9.  
  10. class Cor{
  11.     char *nume;
  12.     int nrMembri;
  13. public:
  14.     Cor(char * = nullptr, int =4);
  15.     Cor(const Cor&);
  16.     ~Cor();
  17.     Cor& operator=(const Cor&);
  18. private:
  19.     void init(char*, int);
  20. };
  21. Deoarece clasa conține un membru de tip pointer numele corului se va supraîncărca și operatorul =.
  22.  
  23. void Cor::init(char * n, int nr){
  24.     if (n != NULL){
  25.         this->nume = new char[strlen(n)];
  26.         strcpy(this->nume, n);
  27.     }else{
  28.         nume = NULL;
  29.     }
  30.     this->nrMembri = nr;
  31. }
  32. Cor::Cor(char * n, int nr){
  33.     this->init(n,nr);
  34. }
  35. Cor::Cor(const Cor&c){
  36.     this->init(c.nume, c.nrMembri);
  37. }
  38. Cor::~Cor(){
  39.     if (this->nume != NULL) delete [] this->nume;
  40. }
  41. Cor& Cor::operator=(const Cor&c){
  42.     if (&c==this) return *this;
  43.     if (this->nume != NULL) delete [] this->nume;
  44.     this->init(c.nume, c.nrMembri);
  45.     return *this;
  46. }
  47.  
  48.  
  49. 2. Supraîncărcați operatorul de scriere pentru afișarea de obiecte
  50. friend ostream& operator << (ostream &, const Cor&);
  51. ostream& operator << (ostream &st, const Cor&c){
  52.     st << "Cor[nume: " << c.nume << ", nr membri: " << c.nrMembri << "]";
  53.     return st;
  54. }
  55. 3. Supraîncărcați operatorii += pentru a crește numărul de membri ai corului
  56. Cor& operator+=(int);
  57. Cor& Cor::operator+=(int x){
  58.     this->nrMembri +=x;
  59.     return *this;
  60. }
  61. 4. Supraîncărcați operatorul < pentru a compara două coruri din peunct de vedere a numărului de membri
  62. friend bool operator <(const Cor&, const Cor&);
  63. bool operator <(const Cor&c1, const Cor&c2){
  64.     return c1.nrMembri < c2.nrMembri;
  65. }
  66. 5. Testarea funcționalități
  67. int main(){
  68.     Cor a("Madrigal", 20);
  69.     Cor b("Mundi", 100);
  70.     Cor c;
  71.     c=a;
  72.     cout << a << endl;;
  73.     a+=100;
  74.     cout << a << endl;
  75.    
  76.     if (c<b) cout<< "corul " << c << "are mai putini membri decat corul " << b << endl;
  77.     else cout<< "corul " << b << "are mai putini membri decat corul " << c << endl;
  78.     return 0;
  79. }