In C++, ist es möglich, eine Basis und abgeleitete Klasse implementieren eine einzige Schnittstelle?C++: Derived + Base-Klasse implementieren eine einzige Schnittstelle?
Zum Beispiel:
class Interface
{
public:
virtual void BaseFunction() = 0;
virtual void DerivedFunction() = 0;
};
class Base
{
public:
virtual void BaseFunction(){}
};
class Derived : public Base, public Interface
{
public:
void DerivedFunction(){}
};
void main()
{
Derived derived;
}
Dies schlägt fehl, da Abgeleitet nicht instanziiert werden kann. Soweit der Compiler betroffen ist, ist Interface :: BaseFunction niemals definiert.
Bisher ist die einzige Lösung, die ich gefunden habe wäre ein Pass-Through-Funktion in Abgeleitet
class Derived : public Base, public Interface
{
public:
void DerivedFunction(){}
void BaseFunction(){ Base::BaseFunction(); }
};
Gibt es eine bessere Lösung zu erklären?
EDIT: Wenn es darauf ankommt, ist hier eine reale Welt Problem, das ich MFC Dialoge hatte verwenden.
Ich habe eine Dialogklasse (MyDialog lässt sagen), die von CDialog abgeleitet ist. Aufgrund von Abhängigkeitsproblemen muss ich eine abstrakte Schnittstelle (MyDialogInterface) erstellen. Die Klasse, die MyDialogInterface verwendet, muss die für MyDialog spezifischen Methoden verwenden, muss aber auch CDialog :: SetParent aufrufen. Ich habe es gerade gelöst, indem ich MyDialog :: SetParent erstellt habe und es zu CDialog :: SetParent weitergeleitet habe, aber ich habe mich gefragt, ob es einen besseren Weg gibt.
Wenn Sie es so machen, dann brauchen Sie nicht die zweite Erklärung von BaseFunction. – Torlack
Es ist was er geschrieben hat. Ich wollte es nicht ändern. Er könnte einen Grund haben es so zu ändern –
Ich habe einen Kommentar dazu gemacht. Danke :) –