5. Juni 200817 j Hi! Angenommen es gibt eine Klasse, die zwar keinen Standardkonstruktor mitbringt, dafür jedoch zwei Konstruktoren mit Parametern: class Test { Test(const char* c = "") : m_String(c) {} Test(const string& s) : m_String(s) {} ... }; Welcher Konstruktor wird aufgerufen, wenn nun folgendermaßen ein Objekt erstellt wird?Test t; Vom Bauchgefühl her würde ich sagen, dass der Konstruktor mit vorbelegtem char-Array aufgerufen und ein leerer String angelegt wird. Mein Hirn sagt, es wird der implizit erstellte Standardkonstruktor aufgerufen - weiß aber nicht, welchen Wert dann m_String annimmt. Wer hat nun recht?
6. Juni 200817 j Wer hat nun recht? Dein Bauch. Dein Hirn irrt insoweit, als gar kein automatischer Defaultkonstruktor angelegt wird, sobald du selbst irgendeinen Konstruktor deklarierst.
6. Juni 200817 j Dein Bauch. Ist auch klar, weil das der einzige Konstruktor ist, der keine Parameter benötigt. Was wäre aber, wenn der Konstruktor mit der string-Referenz auch mit Standardwerten vorbelegt werden würde?
6. Juni 200817 j Hmm kanns hier gerade nicht nachvollziehen, aber theoretisch müsste da der Compiler schon meckern, da er das nicht eindeutig zuordnen kann. Probiers doch einfach mal.
6. Juni 200817 j Hmm kanns hier gerade nicht nachvollziehen, aber theoretisch müsste da der Compiler schon meckern, da er das nicht eindeutig zuordnen kann. hmm, ja, macht er: Warnung 1 warning C4520: 'Test': Mehrere Standardkonstruktoren angegeben Fehler 2 error C2668: 'Test::Test': Mehrdeutiger Aufruf einer überladenen Funktion :floet:
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.