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>


Anmelden zum Antworten