brospresident

Untitled

Oct 24th, 2021
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.28 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3.  
  4. using namespace std;
  5.  
  6. class Sibling
  7. {
  8.     private:
  9.    
  10.         char *nume;
  11.         char *prenume;
  12.         int *varsta;
  13.         // int size;
  14.         // scoatem parametrul asta size pentru ca nu are rost, mai jos in functii tu oricum il schimbi si ajungi la niste memory leaks
  15.  
  16.     public:
  17.         Sibling(const char *n = NULL,const char *p = NULL, const int v = 0);
  18.    
  19.         ~Sibling()
  20.         {
  21.             delete [] nume,prenume,varsta;
  22.         }
  23.    
  24.         Sibling(const Sibling&);
  25.    
  26.         void print()
  27.         {
  28.             cout << this->nume << ' ' << this->prenume << ' ' << *this->varsta << endl;
  29.             // pui *this->varsta ca sa iti afiseze numarul. altfel iti afiseaza ceva de genul 0x80173a0
  30.         }
  31.    
  32.         void update(const char *, const char *, const int);
  33. };
  34.  
  35. Sibling::Sibling(const char *n, const char *p, const int v)
  36. {
  37.     // size = strlen(n);
  38.     this->nume = new char[strlen(n) + 1];
  39.     strcpy(this->nume, n);
  40.  
  41.     // size = strlen(p);
  42.     this->prenume = new char[strlen(p) + 1];
  43.     strcpy(this->prenume, p);
  44.  
  45.     this->varsta = new int(v);
  46.  
  47. }
  48.  
  49.  // nu ar trebui sa transmiti varsta ca vector. iti las in main cum trebuia sa declari obiectul ca sa mearga cu const int* v
  50. void Sibling::update(const char *n, const char *p, const int v)
  51. {
  52.     delete [] nume,prenume,varsta;
  53.     int size = strlen(n); // l-am facut int si ramane doar aici
  54.     nume = new char[size + 1];
  55.     strcpy(nume, n);
  56.  
  57.     size = strlen(p);
  58.     prenume = new char[size + 1];
  59.     strcpy(prenume, p);
  60.  
  61.     varsta = new int(v);
  62.  
  63.  
  64. }
  65.  
  66. Sibling::Sibling(const Sibling& old_str)
  67. {
  68.     // aici size o sa fie egal cu strlen(old_str.prenume)
  69.     int size = strlen(old_str.nume);
  70.     nume = new char[size + 1];
  71.     strcpy(nume, old_str.nume);
  72.  
  73.     // am luat din nou marimea
  74.     size = strlen(old_str.prenume);
  75.     prenume = new char[size + 1];
  76.     strcpy(prenume, old_str.prenume);
  77.  
  78.     varsta= new int(*old_str.varsta);
  79.  
  80. }
  81.  
  82. int main()
  83. {
  84.  
  85.     Sibling sibling1("Popescu", "Ana", 30);
  86.     Sibling sibling2 = sibling1;
  87.  
  88.  
  89.     sibling1.print();
  90.     sibling2.print();
  91.  
  92.     sibling2.update("Ionescu", "Mihaela", 31);
  93.  
  94.     sibling1.print();
  95.     sibling2.print();
  96.     return 0;
  97. }
Add Comment
Please, Sign In to add comment