Konstruktor kopiujący
Ostatnio zmodyfikowano 2017-07-21 15:50
Anim Temat założony przez niniejszego użytkownika |
Konstruktor kopiujący » 2017-07-21 13:05:24 Czy istnieje różnica w sposobie wywołania konstruktora kopiującego? Tz. czy jeśli napiszę tak: to dzieje się coś innego niż w przypadku, gdy napiszę tak: |
|
karambaHZP |
» 2017-07-21 15:03:34 Pierwszy wywoła konstruktor i operator przypisania, a drugi tylko konstruktor. Napisz cout'y w operatorze i konstruktorach i zobacz co będzie wywoływane. |
|
Anim Temat założony przez niniejszego użytkownika |
» 2017-07-21 15:29:05 Albo ja jestem w błędzie i robię coś źle (wcześniej to sprawdziłem, bo myślałem tak jak Ty...ale z kodu poniżej to nie wynika), albo musi być inne wytłumaczenie, aniżeli wskazujesz :) #include <iostream> using namespace std;
class Klasa { public: int A; Klasa(); Klasa( Klasa & X ); };
Klasa::Klasa() { cout << "Konstruktor!" << endl; A = 5; }
Klasa::Klasa( Klasa & X ) { cout << "Konstruktor kopiujący!" << endl; this->A = X.A; }
int main() { Klasa X; X.A = 12; Klasa Y = X; cout << Y.A << endl; cout << endl; Klasa Z( Y ); cout << Z.A << endl; return 0; }
Wynik: Konstruktor! Konstruktor kopiujący! 12
Konstruktor kopiujący! 12
|
|
pekfos |
» 2017-07-21 15:31:42 Pierwszy wywoła konstruktor i operator przypisania, a drugi tylko konstruktor. |
Oba zapisy są równoważne i wywołają konstruktor kopiujący. Różnica jest tylko wtedy, gdy konstruktor kopiujący jest explicit i wtedy zapis z = się nie skompiluje. |
|
Anim Temat założony przez niniejszego użytkownika |
» 2017-07-21 15:50:29 Dziękuję :) właśnie wszedłem, aby to dopisać, bo w tym momencie znalazłem to w kursie cpp0x :) |
|
« 1 » |