Sdílet prostřednictvím


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.

Viz také

Referenční dokumentace

Speciální členské funkce (C++)