Zitat Zitat von dml Beitrag anzeigen
In der Hoffnung Dich nicht inzwischen zu Nerven.
Nope, find ich cool

Zitat Zitat von dml Beitrag anzeigen
Das bringt mich zu dem Problem:
Code:
Document::saveDocument( Mask *mask );
RecipeDocument::saveDocument( RecipeMask *rmask );
Am ehesten so
Code:
class Document
{
public:
    virtual void saveDocument( Mask *mask ) = 0;
};
Code:
class RecipeDocument : public Document
{
public:
    void saveDocument( Mask *mask ) = 0;
};

void RecipeDocument::saveDocument( Mask *mask )
{
    RecipeMask *ourMask = dynamic_cast<RecipeMask*>( mask );
    if ( ourMask == 0 ) {
        // mask not of our type, log error or tell user, etc.
        return;
    }

    // use ourMask
}
Wenn Mask direkt oder indirekt von QQbject abgeleitet ist, kann man statt dynamic_cast auch qobject_cast benutzen.

Zitat Zitat von dml Beitrag anzeigen
Bzw: Wenn ich Maske wieder in Document einfüge muss ich eine Menge leerer virtueller Methoden in der Basisklasse schreiben, damit der Compiler alle Methoden der abgeleiteten Klassen akzeptiert.
Ich kann mich jetzt nicht mehr so gut an den vollständigen Code erinnern, aber wenn Document die jeweiligen Daten enthält bzw bearbeitet und Mask die entsprechende GUI ist, könnte es eventuell andersrum besser gehen.

D.h. wenn die jeweilige Mask sich ein entsprechendes Document erzeugt und hält.

Generell müssen Methoden in der Basisklasse nicht "leer" implementiert werden, wenn sie von allen Subklassen ohnehin verschieden implementiert werden müssen. In diesen Fällen reicht es, die Methoden als "pure virtual" zu deklarieren, also virtual vorne und = 0 hinten.

Das Ziel dabei ist, dass im Rest des Programms möglichst wenig, idealweise gar nicht, zwischen den Subklassen unterschieden werden muss, sondern das durch den Mechanismus des Methodenüberschreibens intern gehandhabt wird,

Ciao,
_