Allgemeine Frage zu Klassen



  • @hustbaer Ich habe reflexartig sofort nach "Supermarkt" gesucht ^^



  • Wo kommt das eigentlich her? Hab's vergessen.



  • @hustbaer hat es schon gut erklärt. Aber um nochmal zu deinem Spiel mit einem Spielfeld zurückzukommen: warum brauchst du nur eins? Stell dir vor, du möchtest das Spiel nun als Netzwerkspiel für hunderte User anbieten - je 2 davon brauchen ein Spielfeld. Du kannst nun einfach anzahlSpieler/2 Spielfelder erzeugen und fertig.

    Außerdem kannst du nach jedem Zug das Spielfeld kopieren, damit die Spieler nach Spielende nochmal zurück zu einem Spielstand gehen können und sich ihre Fehler oder genialen Züge anschauen können.

    Vielleicht willst du ein Spiel auch speichern und ein neues Spiel starten und dann zwischen den Spielen wechseln. Schon brauchst du mehrere Spielfelder.

    Zur Polymorphie: ich benutze eigentlich nur sehr selten Polymorphie. Die ist nämlich nicht immer die beste Lösung. Hängt sicher von den Problemem ab, die man so bearbeitet. Oder anders gesagt: benutzt nicht auf Zwang Polymorphie. (sondern nur da, wo wirklich sinnvoll)



  • @hustbaer sagte in Allgemeine Frage zu Klassen:

    Wo kommt das eigentlich her? Hab's vergessen.

    Jürgen Wolf - C++ von A bis Z Das umfassende Handbuch, 2. aktualisierte Auflage 2009, S. 468

    https://abload.de/img/wolff4jl6.png

    Hier der ungekürzte Unfall:

    // mehrfachvererb3.cpp
    #include <iostream>
    #include <cstring>
    using namespace std;
    
    class Supermarkt {
    protected:
        char markt[100];
    public:
        Supermarkt(const char* m = "") {
            strncpy(markt, m, 100);
            markt[100 - 1] = 0;
        }
        ~Supermarkt() {}
        const char* get_markt() const { return markt; }
    };
    
    class Brot : public Supermarkt {
    protected:
        char brot[100];
        unsigned int gramm;
    public:
        Brot(const char* b = "", unsigned int g = 0,
            const char* m = "") : Supermarkt(m) {
            strncpy(brot, b, 100);
            brot[100 - 1] = 0;
            gramm = g;
        };
        ~Brot() {}
        unsigned int get_gramm() const { return gramm; };
        const char* get_brot() const { return brot; };
    };
    
    class Wurst : public Supermarkt {
    protected:
        char wurst[100];
        unsigned int gramm;
    public:
        Wurst(const char* w = "", unsigned int g = 0,
            const char* m = "") : Supermarkt(m) {
            strncpy(wurst, w, 100);
            wurst[100 - 1] = 0;
            gramm = g;
        };
        ~Wurst() {}
        unsigned int get_gramm() const { return gramm; };
        const char* get_wurst() const { return wurst; };
    };
    
    class Wurstbrot : public Brot, public Wurst {
    public:
        Wurstbrot(const char* b, unsigned int g1, const char* s1,
            const char* w, unsigned int g2, const char* s2) :
            Brot(b, g1, s1), Wurst(w, g2, s2) { }
        ~Wurstbrot() {}
        void get_All() const {
            cout << "Gramm : " << Brot::get_gramm() << '\n';
            cout << "Brot : " << get_brot() << '\n';
            cout << "Gekauft bei : " << Brot::get_markt() << '\n';
            cout << "Gramm : " << Wurst::get_gramm()
                << '\n';
            cout << "Wurst : " << get_wurst() << '\n';
            cout << "Gekauft bei : " << Wurst::get_markt()
                << '\n';
        }
    };
    
    int main() {
        Wurstbrot wbrot("Vollkornbrot", 100, "Meier",
            "Salami", 3, "Eberhardt");
        cout << "Gramm : " << wbrot.Brot::get_gramm()
            << '\n';
        cout << "Brot : " << wbrot.get_brot() << '\n';
        cout << "Gekauft bei : " << wbrot.Brot::get_markt()
            << '\n';
        cout << "Gramm : " << wbrot.Wurst::get_gramm()
            << '\n';
        cout << "Wurst : " << wbrot.get_wurst() << '\n';
        cout << "Gekauft bei : " << wbrot.Wurst::get_markt()
            << '\n';
        cout << '\n';
        // ... oder alle auf einmal
        wbrot.get_All();
        return 0;
    }
    


  • @wob sagte in Allgemeine Frage zu Klassen:

    Zur Polymorphie: ich benutze eigentlich nur sehr selten Polymorphie. Die ist nämlich nicht immer die beste Lösung. Hängt sicher von den Problemem ab, die man so bearbeitet. Oder anders gesagt: benutzt nicht auf Zwang Polymorphie. (sondern nur da, wo wirklich sinnvoll)

    Dem möchte ich mich anschliessen. Mehr oder weniger 🙂

    Denn ... Polymorphie ist oft schon ganz gut. Stichwort Testbarkeit. Was man mMn. eher vermeiden sollte ist Vererbung. Abgesehen von reiner Interface-Vererbung, die in Sprachen wie C++ das Mittel der Wahl ist um Polymorphie umzusetzen.

    Was aber sicherlich stimmt ist dass es keinen Sinn macht Polymorphie zum Selbstzweck irgendwo draufzuwerfen.



  • @Swordfish Ah, Wurstbrot und nicht Wurstsemmel. Deswegen war mit Google kaum was zu finden.



  • Ein Wurstbrot ist ein Supermarkt?! WTF!



  • @wob Frag' Jürgen 🤷♂



  • @Swordfish sagte in Allgemeine Frage zu Klassen:

    Hier der ungekürzte Unfall:

    ROFL 🤣



  • @robert123 sagte in Allgemeine Frage zu Klassen:

    Egal welches Buch man sich kauft

    Welche hast du denn gekauft?



  • Alles klar.
    Vielen Dank.
    Vielleicht sollte ich einfach mal anfangen Klassen zu benutzen, dann wird sicher einiges klarer.
    Bis jetzt löse ich alles über normale Funktionen etc.
    Danke euch.

    Und was das Wurstbrot angeht, schaue ich doch direkt mal ins Buch.
    Das habe ich nämlich auch hier 😂



  • @manni66
    An Büchern habe ich:

    • Das oben angesprochene von Jürgen Wolff
    • Einführung in die programmierung mit c++ (Pearson) von Bjarne S.
    • C++ Primer
    • Intensivkurs C++: Schneller Einstieg über die Standardbibliothek

    Wobei letzteres eher für etwas fortgeschrittenerer User ist, das habe ich aber erst gemerkt als ich es gekauft habe.
    Ich habe die Bücher noch nicht durch und hole sie immer mal wieder aus dem Schrank.
    Ist sicher der falsche Weg in das Thema einzusteigen, da man eigentlich nie wirklich voran kommt und Fertig schon mal garnicht.
    Aber das Thema interessiert mich doch schon ziemlich, aber mir fehlt auch etwas die Zeit es wirklich durchzuziehen.
    Wobei ich sagen muss, dass ich mich in letzter Zeit doch schon intensiver damit beschäftige als noch vor einiger Zeit.
    Hinzu kommt auch dass ich Tatsächlich vor kurzem mein erstes richtiges Programm geschrieben habe und es auch noch funktioniert. Da war ich schon etwas stolz auf mich. 😊



  • Das oben genannte kannst direkt wegwerfen.



  • Jürgen Wolff?
    Warum?
    Und generell-
    Wie kann man ein gutes von einem schlechten unterscheiden?



  • https://www.c-plusplus.net/forum/topic/272350/warnung-bücher-von-jürgen-wolf-zu-c-und-c-zum-lernen-ungeeignet-weil/26

    @robert123 sagte in Allgemeine Frage zu Klassen:

    Wie kann man ein gutes von einem schlechten unterscheiden?

    Kannst du als anfaenger nicht.
    Sowohl hier, als auch auf stackoverflow gibt es buecher listen.



  • @robert123 sagte in Allgemeine Frage zu Klassen:

    Warum?

    Weil der Autor selbst keine Ahnung hat.



  • 😂 😂
    Alles klar.
    Danke



  • @robert123 sagte in Allgemeine Frage zu Klassen:

    Ich habe die Bücher noch nicht durch und hole sie immer mal wieder aus dem Schrank.

    Vielleicht als erstes das Wolf-Zeugs wegwerfen (oder als Türstopper verwenden, oder an eine gehasste Person verschenken) und dann den C++-Primer durcharbeiten.



  • @wob sagte in Allgemeine Frage zu Klassen:

    Ein Wurstbrot ist ein Supermarkt?! WTF!

    Nene. Eine Wurstbrot ist zwei Supermärkte! Ich glaub das ist so wie mit dem Spice und den Würmern. Das versteht man nur wenn man das Buch gelesen hat.



  • @Swordfish
    Den Primer habe ich bisher am meisten benutzt.
    Das schöne an dem Buch finde ich, dass man merkt, dass der jenige, der es geschrieben hat auch Ahnung hat.
    Bei den meisten Tutorials und .pdfs die mal durchgesehen habe gefällt mir der Schreibstil überhaupt nicht.
    Ich kann das gar nicht beschreiben.
    beim Primer merkt man irgendwie das mein ein Buch für erwachsene in der Hand hällt.
    Komische Beschreibung aber mir fällt da nichts anderes zu ein.
    Der Schinken von Bjarne ist auch nicht schlecht. Dort wird sehr schnell auf Dinge eingegangen die in den meisten Büchern erst sehr spät behandelt werden. Zum Beispiel das Thema vectoren. Das einzige was mich nur daran stört ist dass die Codebeispiele in dem Buch sich nur comiplieren lassen, wenn man sich bjarnes zugehörige Headerdatei aus dem Netz lädt.
    Aber auch damit hatte ich schon einige Probleme, weil irgendwas gefehlt hat.

    Ich will den Beitrag jetzt nicht vollstopfen mit der Diskussion über Bücher aber eine Sache möchte ich gerne noch loswerden, die mir auch immer wieder schwerfällt. Ich kam beim Primer jetzt an eine stelle, an der ich das Buch erstmal wieder weggelegt habe. Allerdings nicht, weil da irgendein Mist drin stand, sondern, weil ich mit dem dargestellten überhaupt nichts anfangen konnte.

    Wenn bspw. Strings behandelt werden, hat mal sehr schnell Erfolge zu verbuchen
    "Hey, ich kann etwas ausgeben"
    mit Integern und Operatoren kann ich rechnen.
    "Nice, ich programmiere einen Taschenrechner"
    Ihr wisst was ich meine.
    Aber das letzte Thema was ich gelesen hatte, war etwas über Bitsets, Bitverschiebung, etc.
    und ich fragte mich, was zur Hölle ich damit anfangen kann. Da meistens auch nicht auf konkrete Anwendungsbeispiele eingegangen wird, sondern eher erklärt wird, was diese oder jene Funktion macht, ist es sehr schwer für mich da einen Nutzen raus zuziehen.
    Versteht ihr was ich meine.
    Ich hab einfach keinen Plan, was ich mit einem Bitsets machen soll. Und dann ist es nur eine Frage der Zeit, bis ich eine Unlust entwickele und das Thema recht schnell wieder vergesse.
    Es soll jetzt nicht um Bitsets an sich gehen, das betrifft immer mal wieder das ein oder andere Thema.
    Auch das Durcharbeiten des selbigen Themas wird immer langweiliger, weil ich eben nicht weiß wozu der Autor das Thema so ausbaut, ich am Ende aber trotzdem nicht weiß wozu ich das brauche.
    Klar, beim Computer geht es in der Tiefe um Bits, aber warum sollte ich eine Bitreihe um 3 verschieben?
    Das war jetzt keine Frage😅
    Wollte nur meine allgemeinen Schwierigkeiten nochmal darlegen.


Anmelden zum Antworten