Allgemeine Frage zu Klassen
-
Danke
Bin schon froh wenn's besser als ne Wurstsemmel ist
-
@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
-
-
@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?
-
@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.
-
-
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.