Speicherbedarf dieser Implementierung



  • Hallo, Cpp Community.

    Ich möchte beliebig komplexe 2D-Objekte mit einem OOP Ansatz als abstrakte Klassen repräsentieren.

    Es gibt eine abstrakte Basisklasse

    CZeichenObjekt
    

    Diese Basisklasse hat die rein virtuelle Methode

    drawObject()
    

    Nun kann man zum Beispiel eine Kreisklasse definieren, die von

    CZeichenObjekt
    

    erbt und

    drawObject()
    

    so implementiert, dass beim Aufruf ein Kreis gezeichnet wird.

    Außerdem habe gibt es eine Liste mit Pointern auf die Basisklasse.
    In diese Liste kann man nun beliebige Zeichenobjekte reinpacken.
    Wenn alles gezeichnet werden soll, muss diese Liste nur durchlaufen werden und die

    drawObject()
    

    Methode aufgerufen werden. Also z.b.

    meineZeichenObjektListe[i]->drawObject();
    

    Meine Frage ist wie folgt:
    Ist diese Implementierung ineffizient, da jedes Zeichenobjekt in der Liste eine eigene

    drawObject()
    

    Methode hat?
    In meinem Programm wird es nur ca. 20 verschiedene Objekte geben, aber dafür sehr viele.

    Alternativ habe ich mir überlegt, die Zeichenmethoden nicht in den Zeichenklassen zu definieren un wenn ich die Liste durchlaufe einfach die Objekte zu unterscheiden und je nach dem eine Zeichenmethode aufzurufen.

    Somit wären die Zeichnemethoden nur einmal, zentral vorhanden.

    Allerdings würde ich den ersten Ansatz irgendwie eleganter finden.

    Kann mir jemand was dazu sagen?

    MfG, Knaggy.



  • Knaggy schrieb:

    Ist diese Implementierung ineffizient, da jedes Zeichenobjekt in der Liste eine eigene

    drawObject()
    

    Methode hat?

    Nein, die Methode ist nur einmal pro Klasse vorhanden und wird nicht dupliziert. Nur die Attribute der Klasse werden für jedes Objekt instanziiert.

    Dein Design ist gut und üblich.



  • Ah, super vielen Dank.
    Jetzt habe ich die Gewissheit und kann es so umsetzen. 😋


Anmelden zum Antworten