Vector speichert Objekte einer Klasse
-
Oder willst du die Objekte direkt speichern (also ohne Zeiger), dann einfach das & entfernen:
class B { // ... }; class A { public: void add(const B& b) { liste.push_back( b ); } private: std::vector<B> liste; }; int main() { B b1; A a1; a1.add(b1); }
-
Danke erstmal ... soweit funktioniert es auch.
Ich will es nur noch so gestalten, dass abgeleitete Klassen von A (z.B. eine A1,A2,A3,...) auf diesen Vektor zugreifen können ... z.B. soll A1 dann in einer Funktion liste.size() ausgeben.
-
class A { public: void add(const B& b) { liste.push_back( b ); } protected: std::vector<B> liste; };
-
Zugriff auf die Liste geht aber dann soll A1,A2,A3 den selben Wert wie A ausgeben.
In meiner Ausgabe sind sie alle 0 obwohl ich vorher für A ein addOutput gesetzt habe.
A sagt liste.size 1
A1,A2,A3 sagen liste hat size 0Hm...
-
Vielleicht weil Du unterschiedliche Objekte hast?!
Vielleicht wäre auch etwas mehr Code hilfreich...
-
class A { protected: std::vector<Hw> liste; //Klasse Hw ist extern deklariert aber tut im Moment nichts public: void addOutput(const Hw& a); void funktion(); }; void A::addOutput(const Hw& a) //Liste füllen { liste.push_back(a); } void A::funktion() // Listeninhalt zählen { cout<<"SizeOUT:"<<liste.size()<<endl; } class MA1:public A { public: void funktion(); }; void MA1::funktion() { cout<<"SizeOUT:"<<liste.size()<<endl; // Hier sollte die gleiche Size ausgegeben werden wie in der Basisklasse } class MA2:public A { public: void funktion(); }; void MA2::funktion() { cout<<"SizeOUT:"<<liste.size()<<endl; // Hier sollte die gleiche Size ausgegeben werden wie in der Basisklasse } int main() { A a1; MA1 ma1; MA2 ma2; Hw m1; //0 Hw m2; //1 a1.addOutput(m1); //soll für MA1 und MA2 auch gelten a1.addOutput(m2); a1.funktion(); ma1.funktion(); ma2.funktion(); }
-
Weil du nur die Hw-Objekte dem a1 hinzufügst. liste ist kein static member, und deshalb wird er nur in dem Kontext eines einzelnen Objektes verändert.
Für jedes A-Objekt (dazu zählen auch abgeleitete Klassen) gibt es ein eigenes liste-Objekt.
Les dir doch einfach nochmal die Kapitel zu Objektorientierung in deinem Buch durch.
-
Habe ich nur da gehts bisher in keinem Buch konkret auf so eine Anforderung ... ich hätte drauf getippt irgendwie mit this zu Tricksen aber danke für den Tipp mit static
-
Irgendwie mit this tricksen?! OMG, du solltest den Tipp mit den Grundlagen vorher noch beherzign, damit Du weisst, was Du da (mit static) überhaupt tust

Um mal bei den albernen Beispielen zu bleiben: Nehmen wir mal an die Klasse A beschreibt ein Wirbeltier. MA1 wäre dann z.B. ein Säugetier (ist ein Wirbeltier). Dann legst Du ein konkretes Wirbeltier a1 (nennen wir es Waldi) und ein Säugetier ma1 (nennen wir es Hasso) an. Wenn Du nun dem Wirbeltier Waldi etwas zu essen gibst, soll es gleichzeitig im Magen von Hasso landen?
-
Ok, ich nehme mal ein passendes Beispiel ... du bist in der Matrix, wir alle gehören zur Oberklasse Matrix, also du, die Mitglieder hier und ich. Die Matrix hat jetzt aber eine bestimmte Anzahl von Türen, Telefonen, etc um rein und rauszukommen ... so, damit man jetzt nicht jedem einzelnen sagen muss wo die Türen und Telefone sind hauen wir ein dickes static Plakat an die Wand. Ein Mutex sorgt dann noch dafür das wir nicht alle gemeinsam durch eine Tür latschen.
Das wäre grob mein Thema
Sry, ein passenderes Beispiel habe ich nicht gefunden zur späten Stunde ...