Kopírování objektů tříd
Operace přiřazení a operace inicializace způsobí, že jsou objekty zkopírovány.
Přiřazení: Je-li hodnota jednoho objektu přiřazena jiném objektu, je první objekt zkopírován do druhého objektu.Z toho plyne,
Point a, b; ... a = b;
způsobí, že hodnota b je zkopírována do a.
Inicializace: K inicializaci dochází při deklaraci nového objektu, kdy jsou argumenty předány funkcím na základě hodnoty nebo v době, kdy jsou hodnoty funkcí na základě hodnoty vráceny.
Pro objekty typu třídy lze definovat sémantiku "kopie".Uvažujme 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 FILE1.DAT do FILE2.DAT" nebo může znamenat "ignorovat FILE2.DAT a udělat z b druhý popisovač FILE1.DAT." Následujícím způsobem je ke každé třídě třeba připojit odpovídající sémantiku kopírování.
Pomocí operátoru přiřazení operator=, spolu s odkazem na typ třídy jako návratový typ a parametrem předaným pomocí odkazu const - například ClassName& operator=(const ClassName& x);.
Pomocí konstruktoru kopie.Další informace o konstruktoru kopie naleznete v tématu Pravidla deklarace konstruktorů.
Není-li konstruktor kopie deklarován, vygeneruje kompilátor konstruktor kopie s výběrem člena. Není-li deklarován operátor přiřazení kopie, vygeneruje kompilátor operátor přiřazení s výběrem člena.Deklarování konstruktoru kopie nepotlačuje operátor přiřazení kopie vygenerovaný kompilátorem a opačně.Je-li jeden implementován, je doporučeno také implementovat i druhý, tak aby byl význam kódu jasný.
Přiřazení s výběrem člena je detailně popsáno v tématu Přiřazení a inicializace související se členy.
Konstruktor kopie přebírá argument typu class-name**&**, kde class-name je název třídy, pro kterou je konstruktor definován.Příklad:
// spec1_copying_class_objects.cpp
class Window
{
public:
Window( const Window& ); // Declare copy constructor.
// ...
};
int main()
{
}
[!POZNÁMKA]
Nastavení typu argumentu konstruktoru kopie const class-name& kdykoli, kdy je to možné.To zabrání konstruktoru kopie v nechtěných úpravách objektu, ze kterého kopíruje.Je tím také umožněno kopírování z objektů const.