000
12.10.2011, 16:17 Uhr
~yoko
Gast
|
Hallo zusammen,
ich habe mein Problem mal so weit runtergebrochen wie möglich. Bin ein Anfänger in C++ und kenne mich gerade im Bereich Vererbung und Polymorphismus sehr schlecht aus. Nach stundenlanger Suche verzweifle ich nun und erstelle meinen ersten Thread.
Ich würde gerne einen Vektor kopieren, der als Typ die Basisklasse enthält. Allerdings weiß ich nicht richtig wie. Möchte ich auf die kopierten Objekte der Child-Klasse zugreifen, so funktioniert das nicht. Mein bisheriger Ansatz war nicht erfolgreich (siehe folgender Code)
C++: |
#include <vector>
using namespace std;
class strassenobjekt { public: int typ; int abstand_links; int abstand_rechts;
strassenobjekt(int typ,int abstand_links, int abstand_rechts) {
this->typ = typ; this->abstand_links = abstand_links; this->abstand_rechts = abstand_rechts; } virtual int getValue() { return -1; } };
class lane : public strassenobjekt { public: int laneStyle;
lane(int lanestyle, int typ, int abstand_links, int abstand_rechts) : strassenobjekt(typ,abstand_links, abstand_rechts),laneStyle(lanestyle) {
}
int getValue() { return laneStyle; } };
class barrier: public strassenobjekt { public: int barrierStyle;
barrier(int barrierstyle, int typ,int abstand_links, int abstand_rechts) : strassenobjekt(typ,abstand_links, abstand_rechts),barrierStyle(barrierstyle) {
}
int getValue() { return barrierStyle; } };
int main() {
vector<strassenobjekt*> * Liste1 = new vector<strassenobjekt*>; vector<strassenobjekt*> * Liste2 = new vector<strassenobjekt*>;
lane * linie1 = new lane(1,2,3,4); barrier * linie2 = new barrier(5,6,7,8); Liste1->push_back(linie1); Liste1->push_back(linie2);
*Liste2 = *Liste1; //damit die Größe auch stimmt for(int i = 0; i<Liste1->size();i++) { strassenobjekt * das_i_te = new strassenobjekt(0,0,0); //Hier liegt wohl das Problem... *das_i_te = *Liste2->at(i); //Wert von Adresse Liste2->at(i)=das_i_te; //Adresse wird geändert, Wert bleibt gleich
}
strassenobjekt *test1 = Liste1->at(1); strassenobjekt* test2 = Liste2->at(1);
cout << test1->getValue() << endl; cout << test2->getValue() << endl; cout };
|
Output:
5 -1
Also das Problem bei der ganzen Geschichte ist, dass die Basisklasse-Attribute kopiert werden, aber nicht das Objekt an sich.. Somit habe ich nurnoch die Attribute der Basisklasse und das Objekt weiß nicht, dass es eigentlich von der Klasse "lane" sein soll.
Viele Grüße
yoko Dieser Post wurde am 12.10.2011 um 18:36 Uhr von FloSoft editiert. |