Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
class Base // darf nur einmal vererbt werden! Weil auf anderer Stelle auf Base::index zugegriffen wird { public: Base() { index++; } int Aktion(int a) { } void los() { //.. } }; int Base::index=0; class Option ///: public virtual Base { public: Option() { Aktion(11); } }; class Super : public Base, public Option { public: Super() { los(); } }; Super super; |
Administrator
Ich verstehe deinen Anwendungsfall nicht.
Höchstwahrscheinlich ist das, was du tun willst, von der Idee her falsch.
Mit Vererbung stellt man "ist ein"-Relationen dar. Wenn du also z. B. eine Klasse "Schlafen" von einer Klasse "Stapel" erben lässt, dann bedeutet das "Schlafen ist ein Stapel". Es sollte klar sein, dass das Unfug ist.
Ein sinnvolleres Beispiel wäre z. B. eine Klasse "Katze", die von "Säugetier" erbt, und "Säugetier" wiederum von "Tier". Denn jede Katze ist ein Säugetier, und jedes Säugetier ist ein Tier. Umgekehrt gilt das nicht.
Ja ich meine es natuerlich umgekehrt:Ich verstehe deinen Anwendungsfall nicht.
Höchstwahrscheinlich ist das, was du tun willst, von der Idee her falsch.
Mit Vererbung stellt man "ist ein"-Relationen dar. Wenn du also z. B. eine Klasse "Schlafen" von einer Klasse "Stapel" erben lässt, dann bedeutet das "Schlafen ist ein Stapel". Es sollte klar sein, dass das Unfug ist.
Ein sinnvolleres Beispiel wäre z. B. eine Klasse "Katze", die von "Säugetier" erbt, und "Säugetier" wiederum von "Tier". Denn jede Katze ist ein Säugetier, und jedes Säugetier ist ein Tier. Umgekehrt gilt das nicht.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
#include <vector> class Stapel { public: int index; std::vector <std::wstring> m_Stapel; Stapel() { index++; } }; //int Stapel::index=0; //std::vector <std::wstring> Stapel::m_Stapel; class Schlafen : public virtual Stapel { public: Schlafen() { m_Stapel.push_back(L"sofort Schlafen!"); } }; class Essen: public virtual Stapel { public: Essen() { m_Stapel.push_back(L"Essen"); } }; class class_Tagesablauf : public Stapel, Essen { public: class_Tagesablauf() { m_Stapel.push_back(L"Tagesbeginn.. auschlafen..."); fprintf(stderr, "index: %i\n", index); } }; class_Tagesablauf t; |
Administrator
Ja, das ist klar! - Ein persönlicher Tagesablauf hat aber die Funktion eines Stables, sprich Aktivitäten, die man nach einander durchführt.Du hast den Sinn von Vererbung noch nicht verstanden.
Lies meine Antwort nochmal.
Ein Tagesablauf ist kein Stapel und auch kein “Schlafen“.
C-/C++-Quelltext |
|
1 |
class Versammlung : public Mensch |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
class Versammlung { vector<Mensch> m_Teilnehmer; }; denken. Leider ist das nicht,was ich brauche. Weil ich nicht die Einrichtung programmieren will, sondern sein Wesen, z.B. eine Versammlung in form spezieller Gruppierung: [cpp] class Mensch { static vector<Mensch> m_Mensch; static long index=0; } class Politiker : Mensch { //gierig //Sprachgewand //hinterhältig }; class Versammlung_Rede : public Mensch, Politiker, Polizist(1000) // Politiker hält Rede und 1000 Polizisten halten das Volk in Schach, wenn es auser Rand und Band laeuft { public Zuhoehrer_hinzufuegen(Mensch &m) { m_Mensch.push_back(m); index++; print("Der neue Zuhoehrer ist das %i-te Mitglied der Veranstalltung.\n"); } } Versammlung_Rede merkel_rede; merkel_rede.Zuhoehrer_hinzufügen(Mensch{....}); |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
>>besteht aus einer Menge von Aktionen in einer Reihenfolge.n besteht aus einer Menge von Aktionen in einer Reihenfolge.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
class Band : Mensch(1,4) { .... } class klasse_Konterz : Band(4) { Eintritt(Mensch &m) {...} }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class Professor : public Mensch { //Bücherwurm //.... }; class object_Vorlesung : public Professor, private Techniker { public: Eintritt(Mensch &m) { .... } } |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class Band { std::vector<Mensch> Mitglieder; }; class Konzert { std::vector<Band> SpielendeBands; std::vector<Mensch> Zuschauer; }; class Vorlesung { Professor Lesender; Techniker Helfer; std::vector<Student> Zuhoerer; }; |
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »BlueCobold« (24.10.2015, 13:28)
Rein aus Interesse: Kann es sein, dass du C++ aus einem Buch von einem gewissen Herrn Wolf "gelernt" hast?
Ja Du sagst es. - Nach meinem Kenntnisstand wird auch hier class verwendet? Ist das richtig?Das ist aber schon mal definitiv der falsche Ansatz. Das müsste eher so aussehen:
C-/C++-Quelltext
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class Band { std::vector Mitglieder; }; class Konzert { std::vector SpielendeBands; std::vector Zuschauer; }; class Vorlesung { Professor Lesender; Techniker Helfer; std::vector Zuhoerer; };
Komposition! Eine Band *besteht aus* 4 (bzw. einer Menge von) Mitgliedern. Was Du da oben stehen hast ist: "Eine Band ist ein Mensch oder mehrere Menschen". Das ist aber falsch. Genau wie ein Apfelbaum nicht 20 Äpfel ist. Ein Apfelbaum *hat* 20 Äpfel.
Der gravierende Unterschied ergibt sich aus den Eigenschaften. Ein Mensch hat eine Größe, ein Geschlecht, eine Augenfarbe. Eine Band hat das alles nicht. Wenn Band von Mensch erbt, dann hätte sie das alles. Und genau das macht keinen Sinn. Für Vorlesung gilt dasselbe. Eine Vorlesung hat kein Geschlecht und keine Augenfarbe. Der Professor schon. Aber der Professor ist eben nur ein Teil der Vorlesung.</band>
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class Anzahl { int anzhal=0; }; class Teilnehmer { public: Teilnehmer(int anzahl) { ... }; } class Versammlung_Gehirnwaesche : private Politiker, public Zuschauer_Hans // hans greif auf die Attribute von Versammlung_Gehirnwaesche zu { ... } |
Werbeanzeige