This shows you the differences between two versions of the page.
sd-ca:2014:laboratoare:laborator-02 [2015/03/11 20:36] andrei.vasiliu2211 |
sd-ca:2014:laboratoare:laborator-02 [2015/03/11 20:38] (current) andrei.vasiliu2211 |
||
---|---|---|---|
Line 387: | Line 387: | ||
} | } | ||
- | </code> | ||
- | |||
- | ==== Copy-constructor ==== | ||
- | |||
- | Reprezintă un tip de constructor special care se folosește când se dorește/este necesară o copie a unui obiect existent. Dacă nu este declarat, se va genera unul default de către compilator. | ||
- | |||
- | Poate avea unul din următoarele prototipuri | ||
- | |||
- | * MyClass(const MyClass& obj); | ||
- | * MyClass(MyClass& obj); | ||
- | |||
- | === Când se apelează? === | ||
- | |||
- | 1) Apel explicit | ||
- | |||
- | <code c++ explicit_copy_constructor_call.cpp> | ||
- | MyClass m; | ||
- | MyClass x = MyClass(m); /* apel explicit al copy-constructor-ului */ | ||
- | </code> | ||
- | |||
- | 2) Transfer prin valoare ca argument într-o funcție | ||
- | |||
- | <code c++ call_by_value.cpp> | ||
- | void f(MyClass obj); | ||
- | ... | ||
- | MyClass o; | ||
- | f(o); /* se apelează copy-constructor */ | ||
- | </code> | ||
- | |||
- | 3) Transfer prin valoare ca return al unei funcții | ||
- | |||
- | <code ++ return_by_value.cpp> | ||
- | MyClass f() | ||
- | { | ||
- | MyClass a; | ||
- | return a; /* se apelează copy-constructor */ | ||
- | } | ||
- | </code> | ||
- | |||
- | 4) La inițializarea unei variabile declarate pe aceeași linie | ||
- | |||
- | <code c++ init.cpp> | ||
- | MyClass m; | ||
- | MyClass x = m; /* se apelează copy-constructor */ | ||
</code> | </code> | ||