Kopiowanie listy obiektów
Ostatnio zmodyfikowano 2015-12-12 14:41
dzarson Temat założony przez niniejszego użytkownika |
Kopiowanie listy obiektów » 2015-12-11 19:31:10 Cześć :)
Mam problem ze skopiowaniem listy obiektów. Lista sama w sobie także jest obiektem. Tworzę listę, a następnie muszę mieć w innym obiekcie taką samą z takimi samymi danymi itd. Lista jest jednokierunkowa.
Lista A; A.tworzenielisty(); Lista B; B=A;
Dlaczego coś takiego działa w ten sposób, że jeśli zmodyfikuję listę A to B też się zmienia? Sprawdziłam adres komórki pamięci, w której znajduje się pierwszy element listy A i jest on taki sam jak adres komórki B. Jak inaczej do tego podejść?
Z góry dziękuję za odpowiedź. |
|
1aam2am1 |
» 2015-12-11 19:54:34 Jeżeli lista jest twoją własna klasą to musisz zadeklarować sobie operator przypisania i konstruktor kopjujący |
|
dzarson Temat założony przez niniejszego użytkownika |
» 2015-12-11 20:20:19 a dlaczego te dwie rzeczy? |
|
1aam2am1 |
» 2015-12-11 21:19:32 operator przypisania dlatego, że jeżeli np. (a = b;). a już istniało wykonuje się operator przypisania. a jeżeli (Lista a = b;) dla zwiększenia prędkości wykonywania kodu niektóre kompilatory zamiast wywoływać konstruktor a potem operator przypisania. Wywołują tylko konstruktor kopiujący co ma być szybsze. (Optymalizacja) |
|
Gibas11 |
» 2015-12-11 21:25:59 Zamiast pisać cały konstruktor kopiujący możesz po prostu w środku wywołać operator przypisania, będzie prościej. |
|
mateczek |
» 2015-12-12 14:41:11 wskaźniki trzeba uważać to przykład z wyjaśnieniem dlaczego ?? #include <iostream> #include<string> using namespace std; struct _osoba { string * imie; string * nazwisko; _osoba() { imie = new string; nazwisko = new string; } void zapisz( const string im, const string naz ) { * imie = im; * nazwisko = naz; } void przedstaw() { cout <<* imie << " " <<* nazwisko << endl; } ~_osoba() { delete imie; delete nazwisko; } };
int main() { _osoba ja, inna; ja.zapisz( "marek", "marecki" ); inna = ja; inna.zapisz( "piotrek", "piotrowski" ); ja.przedstaw(); cout << "adrees imienia ja" <<&( ja.imie ) << endl; cout << "adres imienia inna" <<& inna.imie << endl; }
http://zapodaj.net/images/7fcb9958dd95a.png wynik tego armagedonu!!! |
|
« 1 » |