Ich habe eine C++ - Schnittstelle mit zwei Methoden. Jede Klasse, die diese Schnittstelle implementiert, muss mindestens eine der beiden Methoden implementieren, kann aber beides definieren. Es ist jedoch nicht notwendig, beides zu definieren. Was ist das beste Muster in einer solchen Situation?Implementierung einer Schnittstelle durch eine Teilmenge seiner Methoden
Antwort
Etwas wie folgt vor:
class MyInterface
{
public:
virtual ~MyInterface() {}
virtual void foo() = 0;
virtual void bar() = 0;
};
class MyAbstractClass : public MyInterface
{
public:
virtual ~MyAbstractClass();
// Provide implementation for foo or bar
virtual void foo() override { }
virtual void bar() override { }
};
class MyNewClass : public MyAbstractClass
{
// Implement either of foo or bar or can be both
};
MyAbstractClass ist nicht von MyInterface geerbt. Was auch immer der Grund in MyAbstractClass ist, warum die MyInterface-Methode nicht rein virtuell, sondern virtuell gemacht wird? – ponayz
@Worry verzeihen über fehlende MyInterface erben. Auch OP erwähnt _ "Ich habe eine C++ Schnittstelle mit zwei Methoden" _ so gab ich Interface Beispiel. – P0W
Ich würde lieber 'foo' und' bar' in 'MyInterface' nicht rein virtuell machen mit Standardimplementierung, die etwas wie" WARN: Operation nicht unterstützt "macht. – Ptaq666
IMHO die Frage schon falsch ist und auch die Klasse ist es auf.
Fall A: Eine Klasse hat eine Definition für eine bestimmte Methode. Die Basisimplementierung sollte ein erwartbares Verhalten bieten. In diesem Fall steht es Ihnen frei, es zu überschreiben oder nicht.
Fall B: Die Methode ist abstrakt, also müssen Sie sie in einer erwartbaren Weise überschreiben, sonst wird der Compiler nicht kompilieren.
Es gibt keine Möglichkeit, ein "Bitte überschreiben Sie eins oder beide" in C++ zu deklarieren. Eine Klasse gegeben, die das erwartet, ist (sehr) schlechtes Design.
Also die Frage existiert nicht. Wenn es existiert, ist es nicht möglich, es mit mehr Details zu beantworten, da es vom Kontext abhängt.
- 1. Schnittstelle referenziert eine innere Klasse seiner Implementierung
- 2. Gson deserialisieren Schnittstelle zu seiner Klasse Implementierung
- 3. Implementierung einer COM-Schnittstelle in C++, Methoden werden nicht offengelegt
- 4. Sind Methoden eine Teilmenge von Eigenschaften?
- 5. Verhalten eine ENUM Implementierung einer Schnittstelle
- 6. Re-Implementierung einer Schnittstelle, die eine andere Schnittstelle bereits erbt
- 7. Definieren einer Teilmenge der Klasse als Schnittstelle
- 8. Implementierung einer Schnittstelle eines Webservice
- 9. Implementierung mehrerer paralleler Schnittstelle
- 10. Implementierung einer Schnittstelle in Go
- 11. Ausführen einer Teilmenge von JUnit @Test-Methoden
- 12. Deklarieren einer Fragment Implementierung einer Schnittstelle
- 13. Mit Merkmale Methoden aus einer Struktur Implementierung
- 14. Implementierung Schnittstelle C#
- 15. Eine Schnittstelle mit abstrakten Methoden
- 16. Registrieren der Implementierung einer COM-Schnittstelle
- 17. Implementierung IConvertible Schnittstelle
- 18. Aufrufe Zuhörer für eine Teilmenge von Lebenszyklus Methoden in JSF
- 19. Pass und speichern Schnittstelle Implementierung
- 20. Wie man eine Schnittstelle zu seiner Unterschnittstelle wirft?
- 21. Schnittstelle Implementierung Callbacks - Management
- 22. Implementierung Schnittstelle Komparatoren
- 23. Implementierung einer generischen Klasse als Schnittstelle definiert
- 24. Implementierung einer Schnittstelle mit parametrisierte Funktion
- 25. mit explizite Schnittstelle Implementierung
- 26. Implementierung einer SolutionIO-Schnittstelle für das Benchmarking
- 27. Castle Windsor - mehrfache Implementierung einer Schnittstelle
- 28. Wie nehme ich eine Teilmenge eines Objekts über eine Schnittstelle?
- 29. Wie erstellt man eine anonyme Implementierung einer Schnittstelle?
- 30. Programm zu einer Schnittstelle nicht eine Implementierung in PHP
In welchem Kontext verwenden Sie diese Klassen? Sie möchten vielleicht näher ausführen. Beachten Sie, dass die auf der Meinung der Befragten basierenden Fragen vom Thema abweichen. –
Ich denke, wenn Sie möchten, dass eine Klasse Ihre Schnittstelle implementiert, müssen Sie die gesamte Schnittstelle implementieren. Möchten Sie eine allgemeine Implementierung in einer bestimmten Klasse überladen? – ponayz
Teilen Sie die Schnittstelle in 2 und fügen Sie jeweils eine Methode hinzu. Klassen können jetzt eine oder beide Schnittstellen implementieren. Eine Schnittstelle sollte als ein Vertrag betrachtet werden (ich implementiere das alles). –