Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Konstruktor kopiujący

Ostatnio zmodyfikowano 2017-07-21 15:50
Autor Wiadomość
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:

C/C++
Klasa A = B;

to dzieje się coś innego niż w przypadku, gdy napiszę tak:

C/C++
Klasa A( B );

P-163466
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.
P-163467
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 :)

C/C++
#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
P-163469
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.
P-163470
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 :)
P-163471
« 1 »
  Strona 1 z 1