[geloest] Frage zu Konstructor



  • Ich les grad ein C++ Buch und mach da halt so die Beispiele mit. Eines davon sieht so aus:

    struct point
    {
            point()
            : x_(0.0), y_(0.0)
            {
                    std::cout << "default constructor" << std::endl;
            }
    
            point(double x, double y)
            : x_(x), y_(y)
            {
                    std::cout << "constructor(" << x << ", " << y << ")" << std::endl;
            }
    
            double x_;
            double y_;
    };
    
    int main()
    {
            point pt(); // <<
            return 0;
    }
    

    Wenn ich das Ding compiliere und ausfuehre passiert gar nichts. Fuer mich halbwegs verstaendlich, weil man ja Konstruktoren nicht direkt aufrufen kann. Der Default-Konstructor von point wird hier also nicht aufgerufen.
    Wenn ich jetzt die oben markierte Zeile durch

    point pt;
    

    ersetze wird der default Konstruktor ausgefuehrt.

    Schoen und gut. Die Frage jetzt, was ist nun mit dem pt aus dem Urspruenglichen Beispiel? Offensichtlich ist es nicht vom Typ point - aber welcher dann?
    Kann mir das bitte jemand erklaeren?

    P.S.: Als kompiler kommt gcc version 4.3.2 zum Einsatz



  • point pt();
    

    Deklariert imho eine Funktion namens pt mit Rückgabetyp point und keinen Parametern.

    point pt;
    

    Erzeugt ein Objekt vom Typ point, dabei wird der Konstruktur ausgeführt.



  • Schoen und gut. Die Frage jetzt, was ist nun mit dem pt aus dem Urspruenglichen Beispiel? Offensichtlich ist es nicht vom Typ point - aber welcher dann?

    Ich schreibs dir mal anders:

    point pt();
    
    int main()
    {
    // pt();
    }
    
    /*das erlaubt der standard auch: auch, wenn iwie niemand so recht weiß, wieso...*/
    
    int main()
    {
       point pt();
    // pt();
    }
    

    siehst du jz, was es ist? ^^
    wenn du die beiden / wegmachst, dann wirst du nen Linker-Fehler bekommen, weil du die Fkt nirgendwo implementiert hast...

    bb



  • unskilled schrieb:

    Schoen und gut. Die Frage jetzt, was ist nun mit dem pt aus dem Urspruenglichen Beispiel? Offensichtlich ist es nicht vom Typ point - aber welcher dann?

    Ich schreibs dir mal anders:

    point pt();
    
    int main()
    {
    // pt();
    }
    
    /*das erlaubt der standard auch: auch, wenn iwie niemand so recht weiß, wieso...*/
    
    int main()
    {
       point pt();
    // pt();
    }
    

    siehst du jz, was es ist? ^^
    wenn du die beiden / wegmachst, dann wirst du nen Linker-Fehler bekommen, weil du die Fkt nirgendwo implementiert hast...

    bb

    Oh verdammt, wieso hab ich das nicht gesehn. Danke!
    Dann ist das eindeutig ein Fehler im Buch, mal schaun ob das schon jemand gemeldet hat.

    lg


Anmelden zum Antworten