Initialisierung von Klassen
-
Hallo
Habe mal wieder ein kleines Problem...
Was ist der Unterschied zwischen diesen drei Anweisungen:MyString a; MyString a(); MyString a = MyString();
Ich habe folgende Funktionen/Operatoren überladen:
MyString(); // Default-Konstruktor MyString(char* szString); MyString(const MyString& str); ~MyString(); MyString& operator()(); MyString& operator()(const MyString& str); MyString& operator()(const char* str); MyString& operator=(const MyString& rhs);
Bei der ersten Anweisung wird der Default-Konstruktor aufgerufen, bei der zweiten allerdings gar nichts (nicht einmal der operator(), den ich extra zum Testen dafür überladen hatte)?!?
Bei der dritten Anweisung wird wieder NUR der Default-Konstruktor aufgerufen, wieso eigentlich nicht der überladene Zuweisungsoperator "=" nicht??Kann mir jemand vielleicht helfen?? Vielen Dank
(Habe über die Suche leider nichts gefunden, was mir helfen könnte)Gruss NeoSpee
-
NeoSpee schrieb:
Was ist der Unterschied zwischen diesen drei Anweisungen:
MyString a; MyString a(); MyString a = MyString();
Ersteres deklariert ein MyString-Objekt vom Typ a. Es wird der Standardkonstruktor aufgerufen (der ohne Argumente).
Zweiteres deklariert eine Funktion a mit dem Rückgabetyp MyString. Böse Falle
Das dritte initialisiert a mit einem temporären MyString-Objekt. Lies dir dazu das hier durch: http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=copyvsdirect#Answ
-
Vielen Dank, Bashar!!!
Klingt eigentlich logisch
Finde es allerdings merkwürdig, dass der Compiler (VC++6.0) nicht meckert - schließlich habe ich die Funktion nur deklariert und nicht definiert. Der Compiler spuckt nicht mal eine Warnung aus! Naja, egal
Ein Dank geht aber auch noch an HumeSikkins für seine informativen Schriften
(Webseite->MeinStudium)!
Hätte ich diese Seite vor etwa einem Jahr gelesen ...
Gruss [NeoSpee]
-
Der Compiler spuckt nicht mal eine Warnung aus
liegt daran,dass du die funktion nirgendwo benutzt.
-
Und selbst dann würde sich erst der Linker beschweren</nitpick>