Problem mit Vererbung und Schnittstellen
-
Hallo,
ich habe eine Basisschnittstelle IComponent, von der meine Komponentenschnittstellen abgeleitet sind:
IComponent |_ IWindowManager |_ IFileSystem usw.Jetzt möchte ich für diese Schnittstellen Klassen implementieren:
class CWindowManager : public IWindowManager { /* ... */ } class CFileSystem : public IFileSystem { /* ... */ }Nun muss ich ja für beide Klassen auch die Methoden von IComponent implementieren, richtig?
Mein Problem ist jetzt: diese Methoden sind bei allen Komponenten gleich. Kann ich es irgendwie schaffen, sie nur ein einziges Mal implementieren zu müssen?
Ich habe folgendes versucht:
Eine Klasse CComponent schreiben, die IComponent implementiert, also genau die Methoden, die ich nicht hundertfach schreiben möchte. Und dann:class CWindowManager : public CComponent, public IWindowManager { /* ... */ } class CFileSystem : public CComponent, public IFileSystem { /* ... */ }Aber das funktioniert nicht...
Hat jemand Rat für mich?
-
Entweder du stellst ne Standardimplementierung bereit in IComponent, oder du leitest wie angedeutet von IComponent ab, implementierst dort die Funktion und leitest alle anderen Klassen von dieser ab, wenn sie wie bei deinem Beispiel CComponent heißt, dann einfach class CFileSystem : public CComponent{}; da CComponent von IComponent abgeleitet ist, erbt CFileSystem ebenfalls alles von IComponent.
-
Erst einmal danke für die Antwort!
Any schrieb:
Entweder du stellst ne Standardimplementierung bereit in IComponent,
Das geht leider nicht, weil die Interfaces keine Implementierung beinhalten können, weil ich nach außen hin alles abschotten möchte.
Any schrieb:
oder du leitest wie angedeutet von IComponent ab, implementierst dort die Funktion und leitest alle anderen Klassen von dieser ab, wenn sie wie bei deinem Beispiel CComponent heißt, dann einfach class CFileSystem : public CComponent{}; da CComponent von IComponent abgeleitet ist, erbt CFileSystem ebenfalls alles von IComponent.
Aber was ist dann mit IFileSystem? Ich muss CFileSystem ja auf jeden Fall von IFileSystem ableiten. Und wenn ich CFileSystem sowohl von IFileSystem als auch von CComponent ableite, funktioniert das nicht, ohne die IComponent-Methoden wiederum neu implementieren zu müssen...

-
Kannst du IFileSystem von CComponent ableiten, oder muss es IComponent sein?
-
Es muss schon von IComponent abgeleitet sein, da CComponent nach außen hin nicht sichtbar ist.