public:classname ? Wo ist der Unterschied



  • Hallo alle zusammen,

    in dem C++ Buch das ich lese wird eine Klasse immer ungefähr so aufgebaut.

    class eineKlasse
    {
        public:
           // ....    
    
        private:
            // ....
    };
    

    Jetzt lese ich gerade ein Buch zur Spieleprogrammierung und dort finde ich sowas:

    class Game
    {
        public:Game();
            void             run();
    
        private:
            void             processEvents();
            void             update();
            void             render();
    }
    

    was hat es denn mit dem "public:Game();" auf sich? Sowas habe ich bislang in keinem C++ Buch gesehen. Welchen Vorteil hat diese Schreibweise und wo ist der Unterschied zu "public:" ohne das Game() ?



  • Das ist nur eine Formatierungsungenauigkeit. Da könnte genauso gut das hier stehen:

    class Game
    {
        public:
            Game();
            void             run();
    
        private:
            void             processEvents();
            void             update();
            void             render();
    }
    

    Und da sehen, dass dies der Konstruktor ist.



  • Oh - alles klar danke ! Hab gedacht das wäre irgendwas neues in C++11. Bin schon wahnsinnig geworden xD ...



  • Nein, ist was normales.

    Was kalr sein sollte ist, dass (fast) alle Whitespaces ignoriert werden. Du könntest dein Programm also in eine einzige Zeile schreiben.

    Ausnahmen bilden z.B. Präprozessor Befehle
    Mehr fällt mir grad nicht ein?!



  • Der Digraph <: kann zu Missverständnissen führen, wenn ein Leerzeichen fehlt.

    #include <string>
    #include <vector>
    
    int main()
    {
    	::std::vector<::std::string> v;
    }
    

    Ideone schrieb:

    prog.cpp:6:15: error: ‘<::’ cannot begin a template-argument list [-fpermissive]
    ::std::vector<::std::string> v;
    ^
    prog.cpp:6:15: note: ‘<:’ is an alternate spelling for ‘[’. Insert whitespace between ‘<’ and ‘::’



  • Dass es manchmal Leerzeichen braucht ist klar.

    intmain(){return0;}
    

    gibt auch einen Fehler. Aber '\n' kann, nachdem der Präprozessor durchgelaufen ist, immer durch ' ' ersetzt werden


Anmelden zum Antworten