Sdílet prostřednictvím


Pravidla deklarace konstruktorů

Konstruktor má stejný název jako jeho třída.Podle pravidel přetížených funkcí lze deklarovat libovolný počet konstruktorů. (Další informace naleznete v tématu Přetěžování.)

class-name  (  argument-declaration-list  )

Poznámky

argument-declaration-list může být prázdný.

Jazyk C++ definuje dva zvláštní typy konstruktorů, výchozí a kopírovací konstruktory, které jsou popsány v následující tabulce.

Výchozí a kopírovací konstruktory

Druh konstrukce

Arguments

Účel

Výchozí konstruktor

Lze jej volat bez argumentů

Vytvoří výchozí objekt typu třídy

Kopírovací konstruktor

Přijímá jediný argument odkazu na stejný typ třídy

Kopírování objektů typu třídy

Výchozí konstruktory lze volat bez argumentů.Avšak lze deklarovat výchozí konstruktor se seznamem argumentů za předpokladu, že všechny argumenty mají výchozí hodnoty.Podobně musí kopírovací konstruktory přijímat jediný argument odkazu na stejný typ třídy.Lze zadat další argumenty za předpokladu, že všechny následující argumenty mají výchozí hodnoty.

Pokud nezadáte žádné konstruktory, kompilátor se pokusí vygenerovat výchozí konstruktor.Pokud nezadáte žádný kopírovací konstruktor, kompilátor se jej pokusí vygenerovat.Tyto konstruktory vygenerované kompilátorem jsou považovány za veřejné členské funkce.Pokud zadáte kopírovací konstruktor, kterého první argument je objekt a ne odkaz, je vygenerována chyba.

Výchozí konstruktor vygenerovaný kompilátorem nastaví objekt (inicializuje vftables a vbtables jak je popsáno dříve) a zavolá výchozí konstruktory základních tříd a členů, ale neprovede žádné další akce.Konstruktory základní třídy a členů jsou zavolány pouze tehdy, pokud existují, jsou přístupné a jsou jednoznačné.

Kopírovací konstruktor vygenerovaný kompilátorem vytvoří nový objekt a provede kopii obsahu objektu podle členů, který chcete zkopírovat.Pokud základní třída nebo členské konstruktory existují, jsou zavolány, jinak se provede operace bitového kopírování.

Pokud všechny základní a členské třídy type třídy mají kopírovací konstruktory, které přijímají argument const, kopírovací konstruktor vygenerovaný kompilátorem přijímá jeden argument typu const type**&.Jinak kopírovací konstruktor vygenerovaný kompilátorem přijímá jeden argument typu type&**.

Konstruktor lze použít pro inicializaci objektu const nebo volatile, ale konstruktor samotný nemůže být deklarován jako const nebo volatile.Jediná povolená paměťová třída pro konstruktor je inline, použití jakéhokoli jiného modifikátoru paměťové třídy, včetně klíčového slova __declspec, s konstruktorem způsobí chybu kompilátoru.

Konvence volání stdcall se používá se statickými členy funkcí a globálních funkcí deklarovaných s klíčovým slovem __stdcall a nepoužívají seznam argumentů proměnných.Při použití klíčového slova __stdcall s nestatickými členy funkce, jako je konstruktor, kompilátor použije konvenci volání thiscall.

Konstruktory základních tříd nejsou zděděny odvozenými třídami.Při vytvoření objektu odvozeného typu třídy je nejprve zkonstruován s komponentami základní třídy, poté se přesune na komponenty odvozené třídy.Kompilátor používá konstruktor každé základní třídy jako když je tato část celého objektu inicializována (s výjimkou případů virtuálního odvození, jak je popsáno v tématu Inicializace základních tříd).

Viz také

Referenční dokumentace

Konstruktory (C++)