007
05.04.2004, 13:44 Uhr
RHBaum
|
@(un)wissender von virtual:
Zitat: |
Generell gibt es in C++ ja nich das Interface-Concept wie in Java: In C++ sollte man Klassen, die nicht final sind, stets mit einem virtuellen dtor versehen.
|
deswegen wird dir der "Standard" da sicher nicht so richtig weiterhelfen. Die einzigen Anwendungen die ich kenne, die in C++ das "Konzept" der Interfaces extensiv nutzen und auch denken dass sie die Urheber sind, ist M$ mit der ATL. und die trennen strikt zwischen Deklaration von Schnittstellen (Interfaces) und Implementation. Das heisst bei denen sind die Interfaces wirklich nur die deklaration der User-Funktionen. Fuer das Verhalten ist die Implementation zustaendig. Sprich die interfaces haben keinen Destruktor, dafuer ist die erste Ableitung zustaendig, die Funktionalitaet implementiert. Beispiel IUnknown -> IDispatch -> IDispatchImpl Erst IDispatchImpl hat den virtuellen Destruktor. Copy Konstruktoren und ZuweisungsOps wirst da nicht finden, da sie nen eigenes System von HandHabung der Schittstellen unterstuetzen (IDispatch und QueryInterface) .... welches auch Aggregation und multiple schnittsellen beruecksichtigt ..... Aber das ist M$ Zeugs :p
Ich denk mal auch, das die logsichen Probleme grade von Schnittstellen in bezug auf CopyConstruktoren und Zuweisungsops der Grund fuer die eher zaghafte Verbreitung "reiner" Schnittstellen sind:
Stell dir vor du hast ne Hirachie : IAbtstr1 <- IAbtstr2 <- IAbtstr3 <- Concret1 <- Concret2 <- Concret3;
IAbtstr1 * pGeneralPointer1 = new Concret1; IAbtstr1 * pGeneralPointer2 = new Concret3(pGeneralPointer1 );
versuch mal deinem system hier beizubringen, welchen CCtor usw es zu verwenden hat .... In C++ fehlt deinem generellen Zeiger die Information, welche klasse genau dahinter steht .... Koennte man ueber RTI loesen ... aber die Nachteilen sind ja bekannt ....
Ciao ... Dieser Post wurde am 05.04.2004 um 13:57 Uhr von RHBaum editiert. |