Vererbung



  • Hallo,

    ich habe hier Klassen, die folgendermassen vererbt werden (Basierend auf Qt):

    QWidget 
                  |
      /-----------|----------\
      |           |          |
    QwtPlot     Plot      QwtPlot3D
      \-----|-----|----|----/
            |          |
            |          |
          Plot2d    Plot3d
    

    (QwtPlot3d: qwtplot3d.sourceforge.net
    QwtPlot: qwt.sourceforge.net)

    Nun habe ich allerdings das Problem, wenn ich in Qt ein Plot2d-Objekt anzeigen lasse, dass "nichts" angezeigt wird - was bedeutet, dass das Plot2d-Objekt ein einfaches QWidget ist (was es wohl von Plot geerbt hat) und nicht ein QwtPlot.

    Da Plot ein QWidget ist und QwtPlot auch, dachte ich, dass Plot2d "das Beste" von beiden erbt. Also die Darstellung eines QwtPlots und ein paar Funktionen, die ich zu Plot hinzugefuegt habe.

    Kann man das irgendwie aendern?
    Hab mir schon "virtual" angeguckt. Das scheint aber nicht das zu sein, was ich brauche.

    Danke fuer eure Tipps!



  • MasterM schrieb:

    Hallo,

    ich habe hier Klassen, die folgendermassen vererbt werden (Basierend auf Qt):

    QWidget 
                  |
      /-----------|----------\
      |           |          |
    QwtPlot     Plot      QwtPlot3D
      \-----|-----|----|----/
            |          |
            |          |
          Plot2d    Plot3d
    

    (QwtPlot3d: qwtplot3d.sourceforge.net
    QwtPlot: qwt.sourceforge.net)

    Nun habe ich allerdings das Problem, wenn ich in Qt ein Plot2d-Objekt anzeigen lasse, dass "nichts" angezeigt wird - was bedeutet, dass das Plot2d-Objekt ein einfaches QWidget ist (was es wohl von Plot geerbt hat) und nicht ein QwtPlot.

    Da Plot ein QWidget ist und QwtPlot auch, dachte ich, dass Plot2d "das Beste" von beiden erbt. Also die Darstellung eines QwtPlots und ein paar Funktionen, die ich zu Plot hinzugefuegt habe.

    Kann man das irgendwie aendern?
    Hab mir schon "virtual" angeguckt. Das scheint aber nicht das zu sein, was ich brauche.

    Danke fuer eure Tipps!

    Ich finde deine Frage (oder das Problem) ziemlich schwer verständlich. Zum Beispiel:

    Falls "nichts" angezeigt wird, warum folgt daraus, dass Plot2d ein einfaches QWidget ist? Nach deinem Klassendiagramm ist das definitiv nicht der Fall.

    Du hast dir "virtual" angekuckt, womit du vermutlich virtuelle Vererbung meinst, findest aber, dass dies nicht das ist, was du brauchst. Bist du dir da sicher? Ich könnte mir nämlich vorstellen, dass virtuelle Vererbung keine schlechte Idee ist.

    Eine Annahme von dir (wenn ich sie richtig verstehe) ist definitiv falsch, nämlich dass Plot2d "das Beste" von seinen Oberklassen erbt. Das klingt für mich nach einer Art selektiven Erbens. Richtig ist, dass Plot2d alles von den Oberklassen erbt, inklusive der gemeinsamen Oberklasse QWidget. Die Klasse ist also gleich dreimal ein QWidget. Möglicherweise stammen deine Probleme genau da her.

    Für mich ist dein Beispiel eines der hässlichsten Dinge, die man mit C++ im Sachen Vererbung machen kann. Ich würde sowas ums Verrecken nicht formulieren wollen. Ohne dir zu nahe treten zu wollen natürlich.

    Stefan.


Anmelden zum Antworten