Konstruktor kopiujący i op.przypisania klasy String

0

Witam, od pewnego czasu rozkminiam pewną kwestię, czy mógłby ktoś napisać dla mnie jak w języku C++
ma wyglądać kontruktor kopiujący oraz przeciążony operator przypisania dla poniższej klasy :
Konstruktor parametryczny napisałem poprawnie (?)


class String{

   int size;
   char * data;


 String( int length){

     this->size=length;
     data = new char[this->size];

}

~String(){

 delete data;

}


};



 
0

long - jest słowem kluczowym, zarezerwowanym. Nie możesz mieć zmiennych o tej nazwie.

0

String::String( const String & S){   // kopiujacy ? 

 this.size=S.size;
 data= new char[size];
 std::strcpy(data,S.data);
 return *this;


}


String & String::operator = (const String & S){   // operator przypisania 

  if(this==&S)
     return *this;    // czy this ? 

  delete [] data;
  this.size=S.size;
  data= new char[S.size];
  std::strcpy(data,S.data);
  return *this;
 




}


 
0
  1. Tak jest to deklaracja konstruktora kopiującego.
  2. Nie strcpy, ponieważ strcpy() wymaga napisu a jak widać w jedynym konstruktorze tego nie pilnujesz, więc memcpy albo pętla
  3. Żadnych return w konstruktorach
  4. Może lepiej zrób metodę:
swap(String &S) { std::swap(size,S.size); std::swap(data,S.data); }

po czym operator = wygląda następująco: String &String::operator=(const String &S) { String tmp(S); swap(tmp); return *this; }

 czyli sprytnie wykorzystujemy konstruktor kopiujący oraz destruktor.

1 użytkowników online, w tym zalogowanych: 0, gości: 1