C+ statt C++



  • Ich lese gerade die Meinung von Marc++us(?) zu einem Buch über Spieleprogrammierung.

    Darin schreibt er:
    ...Auch hier wieder ein klarer Fall von "C+", also C mit Klassen statt echtem C++. Klassen unsicher ausprogrammiert, unnötige Verwendung von Zeigern statt Instanzen, switch statt virtual, public-Variablen...

    Ich gehöre auch zu der Sorte die C+ programmieren 😃 (ich mach das auch nicht lange)

    Was mich interessieren würde.

    Was meint er mit Instanzen statt Zeiger verwenden?
    Was meint er mit virtul statt switsch zu verwenden?
    public ist klar.

    Währe toll wenn ihr einen jungen C+ programmierer auf den richtigen Weg bringen würdet 🙂

    danke und cu.



  • Effe schrieb:

    Was meint er mit virtul statt switsch zu verwenden?

    Polymorphie. Siehe S. 67ff. Ausführlicher wird dir das hier auch keiner erklären wollen/können.
    (Die Stelle im Buch ist IMHO aber (absichtlich?) etwas unklar forumliert. Hört sich an, als könnte man switch-Blöcke generell durch eine objektorientiertere Konstruktion ersetzen. Eigentlich geht es aber "nur" um die "Spezialisierung" von Klassen.)



  • Instanz erklärt am Bsp. einer Struktur (Klassen sind wie Strukturen, können aber einiges mehr...):

    struct test
    {
        ....
    };
    
    struct test eine_instanz;
    
    struct test *pointer_auf_struct;
    


  • gh0st124 schrieb:

    Klassen sind wie Strukturen, können aber einiges mehr...

    zum Beispiel?



  • Klassen sind das selbe wie structs. Außer du meinst vielleicht die alten C - structs. Gut, dass ich nie C programmiert habe. 🤡



  • Im Buch waren wieder so typische Beispiele drin wie das hier:

    switch (eingabemodus)
    {
    case maus:
       eingabe = Maus.Input();
       break;
    case joystick:
       eingabe = Joystick.Input();
       break;
    ...
    }
    
    // oder
    switch (spielerfigur)
    {
    case jaeger:
        spieler.jage();
        break;
    case gejagter:
        spieler.renne();
        break;
    ...
    }
    

    Statt das über Polymorphie und generische Vorgehensweisen zu lösen. Solche Konstruktionen zeigen einfach, daß sich der Entwickler nicht wirklich mit OO angefreundet hat, sondern außer Kapselung keinerlei Elemente von C++ verwendet. Dadurch werden Programme aufgebläht und die gesamte Eleganz, komplexe Abschnitte in Einzeiler aufzulösen wird nicht genutzt.

    In meinem Buch (@TDKBacke: ich glaube Du hast hier was falsch verstanden, er bezog sich auf einen Kommentar zu einem Spielebuch) habe ich dazu einige Beispiele, vor allem in der Gras-Schaf-Wolf-Simulation.
    http://www.c-plusplus.net/titelanzeige.php?ISBN=3826629841



  • Werde mir mal das Buch zulegen 👍

    cu.



  • Optimizer schrieb:

    Klassen sind das selbe wie structs. Außer du meinst vielleicht die alten C - structs. Gut, dass ich nie C programmiert habe. 🤡

    Ist es nicht so, dass struct-members (falls nicht explizit angegeben) automatisch public sind während class-members automatisch private sind? Ich finde das ist schon ein winzig kleiner Unterschied 😉 .



  • Es ist technisch kein Unterschied 😉



  • Klar, aber erst nach dem Syntaxcheck.



  • krass, is ja gut. Nur weil man sie minimal anders bedient, ist es trotzdem das selbe. Davon abgesehen, macht es für mich sowieso keinen Unterschied, weil ich immer explizit nen public, protected und private - Teil habe.



  • Shlo schrieb:

    gh0st124 schrieb:

    Klassen sind wie Strukturen, können aber einiges mehr...

    zum Beispiel?

    o Methoden aufnehmen;
    o Einzelne Elemente verstecken (Zugriffsspezifikationen a la private - public - protected;



  • Das können Strukturen auch.



  • Naja, aber der Aufwand ist bei structs größer, um das zu bewerkstelligen.



  • häh?
    Leute, offenbar ist vielen von euch nicht bewusst, dass structs und Klassen (deshalb hab ich es auch so provokant geschrieben) das selbe sind.
    Sie werden auch genau so wie Klassen benutzt. Der einzige mir bekannte Unterschied ist der, den MaSTaH erwähnt hat.



  • Schon klar, aber es ist doch unbestritten schwieriger, Membervariablen in structs private zu machen als in Klassen, oder nicht?!



  • Warum ist das schwieriger? Du schreibst genauso public: und private: hin. Es ist genau gleich.
    Nur die Voreinstellung, wenn du nichts hinschreibst, ist anders.



  • Äh...
    Ja, ganze 8 Zeichen (private:) schwieriger. :p

    // struct mit privaten Membervariablen:
    struct foo
    {
    private:
        T bar;
    };
    
    // aequivalente Klasse:
    class foo
    {
        T bar;
    };
    

    Im Ernst: structs SIND tatsächlich äquivalent zu Klassen, mal von dieser Kleinigkeit mit private/ public abgesehen.



  • struct und class sind das gleich... wird auch beim compilieren gleich behandelt. Es gibt also theoretisch keinen Unterschied. Allerdings macht man bei einem struct deutlich "Hey, hier handelt es sich um eine reine Datenstruktur, der ich gerne nur public-Members zur Verfügung stellen will!" Wenn ich keine reine Datenstruktr haben will, nehme ich ein class.

    Es ist eine reine Design-Frage und was ich damit "Aussagen" will.



  • @nman
    also das die gleich sind wage ich zu bezweifeln bis ich nicht ASM code von den beiden beispielen gesehen habe 🙂
    Erst ab dann kann man sagen sie seien "äquivalent"


Anmelden zum Antworten