In C++ erfordert die Übernahme eines gemeinsamen Vorfahren und das Erben einer Schnittstelle (und die Definition einer Methode in abgeleiteten Klassen) eine mehrfache Vererbung? Z.B. kann ich die folgenden Punkte (statt Zusammenführung MyInterface
und ParentClass
) zu tun haben:C++: Sind gemeinsame Abstammung und eine Schnittstelle/Prototyp sich gegenseitig ausschließende Funktionen einer C++ - Klasse?
class MyInterface;
class ParentClass;
class DerivedClass1;
class DerivedClass2;
class SomeOtherType;
class YetAnotherType;
class MyInterface {
public:
// Must be defined in all derived classes
virtual SomeOtherType my_common_fxn(...) = 0;
...
};
class ParentClass {
private:
// Common ancestor
YetAnotherType _useful_member;
}
class DerivedClass1 : MyInterface, ParentClass {
public:
// Do some things with _useful_member, using approach #1
SomeOtherType my_common_fxn(...);
...
}
class DerivedClass2 : MyInterface, ParentClass {
public:
// Do some things with _useful_member, using approach #2
SomeOtherType my_common_fxn(...);
...
}
void fxn_or_method_using(ParentClass);
Ist es möglich, (elegant) verschmelzen die Funktionalität von MyInterface
und ParentClass
in einer einzigen Klasse? (Ich glaube, dass als MyInterface
ist ein ABC Ich kann diesen Typ nicht als Parameter zu fxn_or_method_using
verwenden.)
Entschuldigung im Voraus, wenn dies ein Duplikat ist- Ich habe gesucht, aber keine der vorhandenen C++ Fragen erschien zu richten. Q's und/oder A's waren vielleicht über meinem (untrainierten) Kopf.
Ich bekomme die Frage nicht. Erstens: Warum wäre Mehrfachvererbung hier schlecht? Zweitens: Warum darf ParentClass MyInterface nicht einfach erben lassen? Wenn Sie von einem Java-Hintergrund kommen: Es gibt keine Schnittstelle in C++. Sie können virtuelle Funktionen als 0 deklarieren, wodurch die Klasse abstrakt wird, aber das bedeutet nicht, dass Sie keine definierten Funktionen darin einfügen können. I.e. Sie können my_common_fxn mit dieser Deklaration in ParentClass einfügen. –
'fxn_or_method_using' muss seinen Parameter durch Referenz nicht Wert nehmen, und dann können Sie es als Bezug auf' MyInterfsce' deklarieren, wenn Sie möchten. –
@Klemens 1. Ich habe kein Problem mit Mehrfachvererbung - in der Tat ist mein Code derzeit implementiert. Ich suche etwas "Eleganteres" mit einer einzigen Erbschaft, also werde ich nicht auf Probleme stoßen, die beide vergessen. – mvs