Die Konstruktormethode wird verwendet, um Klassenobjekte zu initialisieren. Anders als andere Member der Elternklasse kann sie nicht von der Unterklasse geerbt werden (eine Unterklasse kann alle Membervariablen und Membermethoden der Elternklasse erben, aber nicht die Konstruktormethoden der Elternklasse). Wenn daher ein Unterklassenobjekt erstellt wird, muss das System, um die von der Elternklasse geerbten Datenmember zu initialisieren, die Konstruktormethoden der Elternklasse aufrufen.
Wenn es keinen expliziten Konstruktor gibt, stellt der Compiler einen Standardkonstruktor bereit, und dieser Standardkonstruktor wird nur erstellt, wenn kein Konstruktor explizit deklariert ist.
Die Konstruktionsprinzipien sind wie folgt:
- 1. Wenn die Unterklasse keine Konstruktormethode definiert, wird die parameterlose Konstruktormethode der Elternklasse aufgerufen.
- 2. Wenn die Unterklasse eine Konstruktormethode definiert, egal ob ohne Argumente oder mit Argumenten, wird beim Erstellen eines Objekts der Unterklasse zuerst die parameterlose Konstruktormethode der Elternklasse ausgeführt und danach ihre eigene Konstruktormethode.
- 3. Beim Erstellen eines Unterklassenobjekts wird, wenn der Konstruktor der Unterklasse nicht explizit den Konstruktor der Elternklasse aufruft, der standardmäßige parameterlose Konstruktor der Elternklasse aufgerufen.
- 4. Beim Erstellen eines Unterklassenobjekts wird, wenn der Konstruktor der Unterklasse nicht explizit den Konstruktor der Elternklasse aufruft und die Elternklasse selbst einen parameterlosen Konstruktor bereitstellt, der eigene parameterlose Konstruktor der Elternklasse aufgerufen.
- 5. Wenn beim Erstellen eines Unterklassenobjekts der Konstruktor der Unterklasse nicht explizit den Konstruktor der Elternklasse aufruft und die Elternklasse nur ihren eigenen parametrisierten Konstruktor definiert, tritt ein Fehler auf (wenn die Elternklasse nur einen parametrisierten Konstruktor hat, muss die Unterklasse diese parametrisierte Konstruktormethode explizit aufrufen).
- 6. Wenn die Unterklasse den parametrisierten Konstruktor der Elternklasse aufruft, muss sie dies durch Initialisieren des Member-Objekts der Elternklasse tun, zum Beispiel:
Beispiel
Nach dem Konstruktor der Fisch-Klasse einen Doppelpunkt hinzufügen:, dann den parametrisierten Konstruktor der Elternklasse hinzufügen. Auf diese Weise ruft das System, wenn der Konstruktor der Unterklasse aufgerufen wird, den parametrisierten Konstruktor der Elternklasse auf, um das Objekt zu konstruieren.
Ausnahmen wie die übliche MFC-CDialog-Vererbung sind in solchen Beispielen zu sehen..
Beispiel
Implementierungsdatei
Beispiel
Diese Initialisierungsmethode wird auch häufig verwendet, um konstante (const) Mitglieder einer Klasse zu initialisieren, wie im folgenden Code gezeigt:
Beispiel
Natürlich können auch gewöhnliche Membervariablen in einer Klasse auf diese Weise initialisiert werden, aber das ist nicht notwendig..
Quelle: http://blog.jobbole.com/109500/