Frage zur Polymorphie



  • Hi, Ich habe folgendes Problem.
    Ich möchte ein System schreiben, mit dem ich Config-Datein auslesen und Speichern kann.
    Werden ganz normal Optionsnamen werten gegenübergestellt. diese werte können entweder Wahrheitswerte, zahlen oder Texte sein.
    Zur besseren Übersicht sollen Optionen grupiert werden können und auch Gruppen wiederum Gruppen enthalten.

    In c++ wollt ich das so umsetzen, dass ich eine abstrakte Klasse "GroupItem" habe. Von dieser leite ich die Klassen "Group" und "Option" ab.
    die Klasse "Option" speichert die entsprechende Einstellung.
    "Group" enthält ein map<string, GroupItem*> in der ich dann die Gruppen/Optionen speichern möchte. Weiterhin, unter anderem,eine Funktion get(string), welche mir einen "GroupItem*" gibt, was allerdings wieder eine Gruppe oder eine Option sein kann.

    Allerdings kann ich mithilfe dieses Zeigers dann immer keine Funktionen der Gruppen/Optionen aufrufen, da die Klassen bis auf eine Funktion (geName) komplett unterschiedlich sind.

    Kann mir einer erklären, wie ich da ran gehen muss, dass das ordentlich geht?
    Hir mal noch nen Link zu meinen nicht wirklich zufriedenstellenden Ergüssen.

    PS: noch eine Frage die mir zwischenzeitlich aufgefallen ist. Ich arbeite dann bei der abfrage komplett mit Zeigern. der Einfachheit halber wollte ich in "Group" ein Operator[] definieren. also ich: "GroupItem* operator[](std::string);". Den Operator muss ich jetzt ja allerdings immer mit (*zeiger)[] verwenden. Gibt es eine Möglichkeit Operatoren für Zeiger eines Objektes zu definieren?



  • Wenn du diese unterschiedlichen Klassen unter einen Hut bringen willst, benötigst du zumindest eine weitere gemeinsame Methode getType(), die dir verrät was für einen Optionstyp (String, Zahl, Gruppe etc) du da in der Hand hältst. Schreib- und Lesezugriffe auf die Optionen müssen entweder über ein gemeinsames Interface (dürfte schwierig sein) oder über dynamic_cast<> erledigt werden.

    finke schrieb:

    PS: noch eine Frage die mir zwischenzeitlich aufgefallen ist. Ich arbeite dann bei der abfrage komplett mit Zeigern. der Einfachheit halber wollte ich in "Group" ein Operator[] definieren. also ich: "GroupItem* operator[](std::string);". Den Operator muss ich jetzt ja allerdings immer mit (*zeiger*)[] verwenden. Gibt es eine Möglichkeit Operatoren für Zeiger eines Objektes zu definieren?

    Zeiger sind eingebaute Datentypen, da kannst du nichts überladen. Aber eine Möglichkeit wäre es, dem Nutzer "nur" Referenzen in die Hand zu geben.


Log in to reply