Polymorphie und Überladung des Schiebeoperators <<



  • Hallo zusammen,

    ich hab hier eine Aufgabe zu Polymorphie in der man eine kleine Klassenhierarchie programmieren soll:
    ............Motor(abstrakt)
    .................|
    ........Elektromotor(abstrakt)
    ..........|.......................|
    Gleichstrommotor......Wechselstrommotor

    soweit klappt auch alles bis auf die Ausgabe:
    "Dies soll mit Polymorphie beherrschenden Schiebeoperatoren für Gleichstrommotoren und Wechselstrommotoren möglich sein."
    (laut Angabe)

    ich hab überhaupt keine Ahnung wie ich das machen soll, ich kann ja nur Memberfunktionen virtual machen und ostream&operator<<(...) is ja jetz keine Memberfunktion.

    wäre gut wenn mir jemand sagen kann wie das geht 🙂
    (kann falls nötig noch den Link zur Aufgabe und mein bisherigen Code posten)

    mfg

    edit: hab gerade gemerkt dass ich hier falsch bin,sry ➡ bitte nach "C++" verschieben



  • Ohne dir jetzt die gesamte Lösung zu präsentieren, hier schon einmal ein paar Denkansätze:

    "Dies soll mit Polymorphie beherrschenden Schiebeoperatoren für Gleichstrommotoren und Wechselstrommotoren möglich sein."

    Aus der Aufgabe kann entnommen werden, dass jeder Elektromotor ausgegeben werden kann. Anders formuliert: Jeder Elektromotor besitzt die Fähigkeit zur Ausgabe seiner Werte.

    Hier solltest du eine (wie du schon festgestellt hast) virtuelle bzw. rein abstrakte Methode zur Ausgabe durch einen Ausgabestrom definieren. Die Subklassen (Gleich- und Wechselstrommotor) implementieren dann die entsprechende Ausgabemethode.

    ich hab überhaupt keine Ahnung wie ich das machen soll, ich kann ja nur Memberfunktionen virtual machen und ostream&operator<<(...) is ja jetz keine Memberfunktion.

    Den globalen left shift-operator (operator<<) musst du nun lediglich für die (abstrakte) Basisklasse überladen. In dessen Implementierung rufst du die Ausgabemethode auf.

    Btw: Dies gehört in den C++-Teil dieses Forums

    Grüße... Heiko



  • ja danke @heiko für die schnelle Antwort, hat mir sehr weitergeholfen 🙂


Anmelden zum Antworten