Konstruktorverkettung in C ++
Mein Verständnis von Konstruktor-Verkettung ist, dass , wenn es mehr als eine Konstruktoren in einer Klasse (überladen von Konstruktoren) , wenn einer von Ihnen versucht, rufen Sie einen anderen Konstruktor,dann
dieser Vorgang wird als KONSTRUKTOR-VERKETTUNG , die nicht unterstützt in C++ .
Vor kurzem stieß ich auf dieses paragraph während das Lesen von online-material.... Es geht so ...
Finden Sie sich selbst in der situation, wo Sie möchten, schreiben Sie eine Mitglied-Funktion zum re-initialisieren einer Klasse wieder auf die default Werte. Weil Sie wahrscheinlich schon haben Sie einen Konstruktor, der dies tut, können Sie versucht sein, rufen Sie den Konstruktor von Ihrem member-Funktion. Wie bereits erwähnt, ist die Verkettung Konstruktor-Aufrufe sind illegal in C++. Sie konnte kopieren Sie den code aus dem Konstruktor in Ihrer Funktion, die würde der Arbeit, führen aber zu doppelten code. Die beste Lösung in diesem Fall ist, verschieben Sie den code aus dem Konstruktor Ihre neue Funktion, die den Konstruktor die Funktion aufrufen, um die Arbeit der Initialisierung der Daten.
Übernimmt ein Mitglied die Funktion, den Aufruf der Konstruktor auch unter constructor chaining ??
Bitte werfen etwas Licht auf dieses Thema in C++ .
InformationsquelleAutor der Frage jsp99 | 2011-09-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Absatz sagt im Grunde dies:
Können Sie nicht an einen Konstruktor von einer member-Funktion. Es mag Ihnen scheinen, dass Sie es getan habe, aber das ist eine illusion:
InformationsquelleAutor der Antwort Armen Tsirunyan
C++11 erlaubt Konstruktor-Verkettung (teilweise). Diese Funktion wird als "delegierende Konstruktoren". Also in C++11 können Sie die folgenden
Es ist jedoch eine schwerwiegende Einschränkung, dass ein Konstruktor ruft einen anderen Konstruktor nicht erlaubt initialisieren alle anderen Mitglieder. So kann man nicht tun, das folgende mit einer delegierenden Konstruktors:
MSVC++2013 gibt compile-Fehler "C3511: ein Anruf, eine delegierende Konstruktor ist die einzige member-Initialisierung" für letzteres code Beispiel.
InformationsquelleAutor der Antwort Serge Rogatch
Dass ist nicht das, was der text sagt. Es ist darauf hindeutet, Ihr Konstruktor-Aufruf einer member-Funktion das ist normal und legal. Dies ist zu vermeiden, ausdrücklich den Aufruf des ctor wieder und zur Vermeidung einer doppelten code zwischen Ihrem Tor und reset-Funktion.
InformationsquelleAutor der Antwort i_am_jorf
Ich bin mir nicht sicher, ob es (ruft einen Konstruktor von einer member-Funktion) funktioniert oder nicht, aber es ist eine schlechte Praxis. bewegen Sie den initialize-code, um eine neue Funktion ist die Logik Weg.
Im Grunde sagen, nicht den Konstruktor aufrufen, es sei denn, Sie konstruieren...
InformationsquelleAutor der Antwort Roee Gavirel
wenn wir rufen Konstruktor von einer member-Funktion, dann wird es temporäre erstellen Sie ein Objekt von dem Typ.
im Falle dass, wenn wir fordern, in der abgeleiteten Klasse die Funktion dann alle Eltern-Konstruktoren sind auch ausgeführt und zerstört mit Destruktor, sobald die Funktion den Gültigkeitsbereich verlässt.
es ist nicht eine Gute Praxis zum Aufruf der Konstruktoren in den Funktionen, da es erstellt Objekte von jeder Klasse abgeleitet.
InformationsquelleAutor der Antwort Narayan