Virtuelle Konstruktoren
Gibt es keine Notwendigkeit für Virtuelle Konstruktoren? Wenn ja, kann jeder einen Beitrag für ein Szenario?
Sie müssen hinzufügen weitere Informationen zu dieser Frage - die Menschen wissen nicht genau, wie es zu beantworten.
kann der Konstruktor virtuell sein ? ich denke nicht so ..wir haben virtuellen Destruktor aber nicht im virtuellen Konstruktor in c++ so weit .
kann der Konstruktor virtuell sein ? ich denke nicht so ..wir haben virtuellen Destruktor aber nicht im virtuellen Konstruktor in c++ so weit .
InformationsquelleAutor Diwakar | 2008-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie sprechen über die virtuelle Destruktoren in C++ (es gibt keine solche Sache wie virtuelle Konstruktoren), dann Sie sollte immer verwendet werden, wenn Sie mit Ihrem Kind-Klassen polymorph.
Edit: Nicht sicher, warum ich habe ein downvote für diese (wäre hilfreich, wenn Sie einen Kommentar hinterlassen...) aber gelesen zu haben hier, wie auch
http://blogs.msdn.com/oldnewthing/archive/2004/05/07/127826.aspx
es scheint eine faire Antwort aus meiner Sicht. +1
InformationsquelleAutor Mark Ingram
Wie immer: schauen Sie bei C++ FAQ lite: virtuelle Funktionen.
Wird es erklären, nicht nur "virtuellen Konstruktor" aber Destruktoren/Funktionen auch!
Diese natürlich, wenn Sie wollten, dass C++ in den ersten Platz...
InformationsquelleAutor Marcin Gil
Delphi ist eine Sprache, die unterstützt virtuelle Konstruktoren.
Sie üblicherweise verwendet werden, in einer class factory Art von Szenario, wo Sie ein meta-Typ also, dass ist ein Typ, der beschreibt eine Art. Sie würden dann verwenden Sie das meta-Typ zu konstruieren, die ein konkretes Beispiel von Ihr abgeleiteten Klasse
Code wäre so etwas wie....
InformationsquelleAutor Tim Jarvis
Gibt es viele Szenarien, zum Beispiel wenn Sie möchten, erstellen GUIs für mehr als einer Umgebung. Lassen Sie uns sagen, Sie haben Klassen für Steuerelemente ("widgets"), aber jede Umgebung hat eigentlich seinen eigenen widget-Satz. Es ist daher logisch, eine Unterklasse der Erstellung von widgets für jede Umgebung. Die Art und Weise, dies zu tun (da, wie schon unhelpfully darauf hingewiesen, Konstruktoren können nicht virtual in den meisten Sprachen), ist es, mit einem abstrakte Fabrik und das obige Beispiel ist eigentlich das standard-Beispiel verwendet, um zu beschreiben, dieses design pattern.
InformationsquelleAutor Konrad Rudolph
In welcher Sprache? In C++ beispielsweise die Konstruktoren können nicht virtuell sein.
InformationsquelleAutor grigy
Den Konstruktor kann nicht virtuell sein per definition. Zum Zeitpunkt der Konstruktor-Aufruf kein Objekt vorhanden ist, die noch erstellt, so dass der Polymorphismus keinen Sinn.
InformationsquelleAutor grigy
In C++, es gibt keinen Grund für Konstrukteure, um immer virtuell sein, weil Sie sind statische Funktionen. Das bedeutet, Sie sind statisch gebunden, so haben Sie zu identifizieren, die sehr Konstruktor-Funktion, die Sie aufrufen, um es auf allen. Es gibt keine Unsicherheit und keinen virtuellen über.
Dies bedeutet auch, dass, egal was, müssen Sie wissen, die Klasse, die Ihr Objekt. Was man jedoch tun kann, ist so etwas wie dieses:
... eine virtuelle Funktion und rufen Sie es nach constructon. Dies ist ein standard-pattern in Objective-C, in welchem zuerst rufen Sie die Klasse "alloc" - Methode, um eine Instanz zu erhalten, und dann rufen Sie die initilializer, die für Ihren Gebrauch.
Die person, die erwähnt das Abstrakte-Fabrik-Muster ist wahrscheinlich das richtige für C++ und Java aber.
InformationsquelleAutor Kevin Conner
In C++, alle Konstruktoren sind implizit virtual (mit ein wenig extra). Das ist der Konstruktor der Basisklasse aufgerufen, bevor die abgeleitete Klasse. So, es ist wie Sie sind eine Art virtuelle. Weil, in der eine virtuelle Methode, wenn die abgeleitete Klasse implementiert eine Methode die gleiche Signatur, nur die Methode in der abgeleiteten Klasse wird aufgerufen.
Jedoch in einem Konstruktor, der die BEIDEN METHODEN WERDEN AUFGERUFEN, (siehe Beispiel unten).
Für eine vollständige Erklärung, warum das so ist, sehen Sie bitte Ziffer 9 der effective C++, Third Edition, Von Scott Meyers (Nie Aufruf einer virtuellen Funktion während der Konstruktion oder Zerstörung). Der Titel des Artikels kann irreführend sein in Bezug auf die Frage, aber liest man die Erklärung, es mache absolut Sinn.
Ausgabe:
Wie oben erwähnt, Punkt 9 in Scott Meyers Buch erläutert und erklärt diese. Eine Ausnahme von dieser ist in virtuellen Basisklassen. Siehe Kapitel 15.2.4.1 von "The C++ Programming Language, Special Edition" von Bjarne Stroustrup für eine Beschreibung von virtuellen Basisklassen und wie "die Sprache wird sichergestellt, dass ein Konstruktor, der eine virtuelle Basisklasse aufgerufen wird, genau einmal".
InformationsquelleAutor Homer6
Virtuelle Konstruktoren dont sinnvoll in C++ . Dies ist, da in C++ Konstruktoren haben keinen Rückgabewert . In einigen anderen Programmiersprachen ist dies nicht der Fall . In den Sprachen der Konstruktor direkt aufgerufen werden können und der Konstruktor hat einen Wert zurück . Das macht Sie nützlich bei der Durchführung bestimmter Arten von desgin-patterns . In C++ ist dies jedoch nicht der Fall .
InformationsquelleAutor rockstar