Regeln zum Deklarieren von Konstruktoren
Ein Konstruktor hat den gleichen Namen wie ihre Klasse.Beliebige Anzahl von Konstruktoren kann je nach den Regeln des überladenen Funktionen deklariert werden.(Weitere Informationen finden Sie unter Überladen).
class-name ( argument-declaration-list )
Hinweise
argument-declaration-list kann leer sein.
C++ definiert zwei spezielle Arten von Konstruktoren, Standard, Kopierkonstruktoren und in der folgenden Tabelle beschrieben.
Kopierkonstruktoren und Standard
Die Art der Konstruktion |
Argumente |
Zweck |
---|---|---|
Standardkonstruktor |
Kann ohne Argumente aufgerufen werden. |
Erstellen Sie ein Standardobjekt des Klassentyps |
Kopierkonstruktor |
Kann ein einzelnes Argument des Verweises auf den gleichen Klassentyp akzeptiert |
Kopien Objekte des Klassentyps |
Standardkonstruktoren können ohne Argumente aufgerufen werden.Sie können jedoch einen Standardkonstruktor mit einer Argumentliste deklarieren, sofern alle Argumente Standardwerte verfügen.Ebenso müssen Kopierkonstruktoren ein einzelnes Argument des Verweises auf den Klassentyp akzeptieren.Weitere Argumente angegeben werden können, bereitgestellt wurden alle nachfolgenden Argumenten verfügen über Standardwerte.
Wenn Sie keine Konstruktoren bereitstellen, versucht der Compiler einen Standardkonstruktor zu generieren.Wenn Sie keinen Kopierkonstruktor angeben, versucht der Compiler, ein zu generieren.Diese vom Compiler generierten Konstruktoren gelten als Funktionen des öffentlichen Members.Ein Fehler wird generiert, wenn Sie einen Kopierkonstruktor mit dem ersten Argument angeben, dass ein Objekt und kein Verweis ist.
Ein vom Compiler erzeugten Standardkonstruktor initialisiert vftables installiert das Objekt (und vbtables, wie zuvor beschrieben, und es wird die Standardkonstruktoren für Basisklassen und Member angezeigt, aber es führt keine weiteren Aktionen.Basisklassen- und Member konstruktoren werden nur aufgerufen, wenn es vorhanden sind, kann zugegriffen werden, und sind eindeutig.
Ein vom Compiler generierten Kopierkonstruktor richtet ein neues Objekt und führt eine memberspezifische Kopie des Inhalts des zu kopierenden aus Objekts.Wenn konstruktoren Basisklasse oder Member vorhanden sind, werden sie aufgerufen. Andernfalls wird das bitweise Kopiervorgang ausgeführt.
Wenn alle Basis und Memberklassen Klasse type Kopierkonstruktoren verfügen, die ein const-Argument akzeptieren, akzeptiert der vom Compiler generierten Kopierkonstruktor ein einzelnes Argument vom Typ const type**&.Andernfalls nimmt der vom Compiler generierten Kopierkonstruktor ein einzelnes Argument vom Typ type&**.
Sie können einen Konstruktor verwenden, um ein const oder volatile-Objekt initialisiert, aber der Konstruktor selbst kann nicht als const oder volatiledeklariert werden.Die einzige zulässige Speicherklasse für einen Konstruktor ist inline. Verwendung von jedem anderen Speicherklassen modifizierer, einschließlich des __declspec-Schlüsselwort mit einem Konstruktor verursacht einen Compilerfehler.
Die stdcall Aufrufkonvention wird für statische Memberfunktionen und globale Funktionen verwendet, die mit dem __stdcall - Schlüsselwort deklariert werden, und diese verwenden keine Variablenargumentliste.Wenn Sie verwenden, wird das __stdcall Schlüsselwort in einer nicht statischen Memberfunktion, z. B. einen Konstruktor, der Compiler die thiscall“ - Aufrufkonvention.
Konstruktoren von Basisklassen werden nicht von abgeleiteten Klassen geerbt.Wenn ein Objekt des Typs der abgeleiteten Klasse erstellt wurde, ist sie erstellte Beginnen mit den Basisklassen Komponenten. Anschließend wird er zu den Komponenten der abgeleiteten Klasse.Der Compiler verwendet den jeden Konstruktor der Basisklasse, wie dieser Teil des vollständigen Objekts initialisiert werden (außer bei virtuelle Ableitungen, wie in Initialisieren von Basisklassenbeschrieben).