Kopírování objektů třídy
Přiřazení operace a operace inicializace způsobit objekty, které chcete zkopírovat.
Přiřazení: Při přiřazení hodnoty jednoho objektu na jiný objekt, první objekt zkopírován do druhého objektu.Proto
Point a, b; ... a = b;
způsobí, že hodnota b zkopírovány do a.
Inicializace: Inicializace dochází při deklaraci nového objektu, při předávání argumentů funkcí podle hodnoty nebo hodnoty jsou hodnoty vrácené z funkce.
Můžete definovat sémantiku pro objekty typu třídy "kopie".Zvažte například tento kód:
TextFile a, b;
a.Open( "FILE1.DAT" );
b.Open( "FILE2.DAT" );
b = a;
Předcházející kód může znamenat "kopírovat obsah Soubor1.DAT Soubor2.DAT"nebo jej může znamenat"Soubor2 ignorovat.DAT a b druhý popisovač FILE1.DAT. " Každá třída musí připojit vhodné sémantiku kopírování takto.
Pomocí operátoru přiřazení operator= s odkaz na typ jako návratový typ a parametr předaný pomocí třídy const odkaz – například ClassName& operator=(const ClassName& x);.
Pomocí kopie konstruktoru.Další informace o kopie konstruktoru, viz Pravidla pro deklarování konstruktory.
Pokud deklarujete není kopie konstruktoru, kompilátor vygeneruje member-wise kopie konstruktoru pro vás. Pokud není deklarovat operátor přiřazení kopie, kompilátor vygeneruje operátor přiřazení kopie member-wise, můžete. Deklarování kopie konstruktoru nepotlačuje operátor přiřazení kopie kompilátoru generovány ani naopak.Některá implementovat, doporučujeme také implementovat druhá tak, že význam kódu je jasné.
Member-Wise přiřazení se podrobněji v Memberwise přiřazení a inicializace.
Kopie konstruktoru trvá argument typu název třídy**&**, kde název třídy je název třídy, pro které je definován konstruktor.Příklad:
// spec1_copying_class_objects.cpp
class Window
{
public:
Window( const Window& ); // Declare copy constructor.
// ...
};
int main()
{
}
[!POZNÁMKA]
Typ argumentu kopie konstruktoru const název třídy& to možné.To zabrání nechtěným úpravám objektu, ze kterého je kopírování kopie konstruktoru.Také umožňuje kopírování z const objekty.