Unterklassenproblem mit einer Map
-
Hallo alle zusammen!
Ich hoffe Ihr könnt mir weiterhelfen:
Ich habe zwei Klassen, eine mit dem Namen "Object", und eine Unterklasse von "Object" mit dem Namen "String". Doch sobald ich eine Instanz von "String" erstelle und diese in einer Map speichere, gibt diese plötzlich nur noch das aus, was eigentlich die Oberklasse ausgeben sollte, hier ein gekürzter Beispiel-Code, was mache ich falsch? Ich hoffe Ihr könnt mir weiterhelfen, danke

#include <iostream> #include <map> using namespace std; class Object { public: string getContent(); }; class String : public Object { public: string content; string getContent(); void setContent(string content); }; string Object::getContent(){ return "<object>"; } string String::getContent(){ return this->content; } void String::setContent(string content){ this->content = content; } int main(){ map<string, Object> objects; String testString; testString.setContent("Test-String"); cout << testString.getContent() << endl; //Ausgabe: Test-String objects["test"] = testString; cout << objects["test"].getContent() << endl; //Ausgabe: <object> return 0; }
-
http://tutorial.schornboeck.net/virtual.htm
Stichwort: Slicing
Du musst Zeiger in der Map speichern, siehe dazu boost::ptr_map