Verebung als alternative zu if Anweisungen oder switch cases



  • Hallo,

    ich versuche gerade die Frage zu klären welche Methode performanter ist.
    Ich bin mir da schon bewusst, dass sich das nicht wirklich für alle Fälle einfach beantworten lässt,... Aber dennoch. 🙂

    Man stelle sich vor ein Objekt vom Typ Entry mit der virtuellen Methode getName()
    desweiteren gibt es Objekte die von Entry abgeleitet sind und die Methode getName() implementieren (auf ihre eigene Weise).

    so könnte man das dann Bsp in einer Schleife einfach mit
    name = entry->getName(); verwenden.

    Oder ist da eine Lösung über ENUMS performanter?

    also es gibt das Entry Objekt mit einem ENUM welcher den konkreten Typ representiert und das muss dann ausgewertet werden und eine spezielle Methode aufgerufen werden. Also sowas:

    if(entry.type = 1)entry.getName_1()
    if(entry.type = 2)entry.getName_2()
    if(entry.type = 3)entry.getName_3()

    ....
    also ich bin ja der Meinung, dass Methode 1 um einiges schneller läuft als Methode 2. jedenfalls dann wenn die Methode getName() um einiges öfter als die Initialisierung der Objekte aufgerufen wird.

    vielen Dank



  • virtuelle Funktionsaufrufe sind mindestens genausoschnell wie das ganze zu Fuß zu machen. Variante 1 ist in diesem Fall ziemlich sicher schneller.
    Wenn sich Vererbung anbietet, verwende sie sinnvoll. Lass dir keinen Mist einreden von wegen "das sei langsam". Es ist übrsichtlicher und meistens auch schneller. Falls das aber nicht in ner zeitkritischen Schleife liegt ist übersichtlichkeit sowieso viel wichtiger als Geschwindigkeit.
    Irgendwie riecht das hier wieder nach premature optimization...

    Btw: if(entry.type = 2) ist wohl falsch "==" wär richtig



  • Stimmt = wäre doof.
    Naja es geht im Prinzip schon um Optimierung und die Aufrufe befinden sich auch in einer relativ zeitkritischen Schleife.

    Aber mir geht es auch um Wartbarkeit und wiederverwendung, deshalb würde ich Mehtode 1 auch bevorzugen.



  • Grundsätzlich gilt selbst bei optimierungen eh erstmal - erst messen, dann optimieren.

    Aber in diesem Fall ist wie gesagt Vererbung klar die bessere Lösung. Schneller und schöner.


Anmelden zum Antworten