Angenommen, ich habe eine Klasse „Betriebssystem“, die nur eine Schnittstelle für das Betriebssystem deklariert.
Code: Select all
struct OS {
virtual int read();
virtual int write();
virtual int open();
virtual int close();
/* ... a lot of methods */
};
Es gibt auch eine Erweiterung für diese Schnittstelle mit mehr Methoden
Code: Select all
struct OS_with_socks: OS {
virtual int socket();
virtual int bind();
virtual int listen();
/* ... a lot of other methods */
};
Außerdem habe ich eine Klasse „actual_OS“, die read() als ::read, write als ::write() usw. definiert. „actual_OS“ wird von „OS“ abgeleitet. Jetzt möchte ich die Klasse „actual_OS_with_socks“ definieren, die dasselbe tut, jedoch für eine erweiterte Betriebssystemschnittstelle. Was ist der richtige Weg, dies zu tun? So?
Code: Select all
struct actual_OS_with_socks: OS_with_socks, actual_OS {
/* implementation of methods socket, listen, bind, e.t.c */
}
Ist das eine gute Vorgehensweise? Kann eine doppelte Vererbung vermieden werden, während die Trennung zwischen der grundlegenden POSIX-Schnittstelle und der Socket-Schnittstelle beibehalten wird? Ist das überhaupt der richtige Weg, dies zu tun?
(Ich benötige den OS-Wrapper zu Testzwecken)