Like the title
Like the title
"Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)
"Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)
http://xvincentx.netsons.org/programBlog
In C++ non esiste dal punto di vista del lessico del linguaggio non esistono le interfacce.
Tuttavia, un'interfaccia è praticamente la stessa cosa di una classe astratta in cui ci siano soltanto funzioni.
Una interfaccia e' una classe che contiene metodi pubblici puri virtuali, non contiene metodi statici, non contiene membri dati.
Come giustamente sottolineato da oregon, le funzioni devono essere tutte virtuali pure pubbliche non statiche.
A questo proposito faccio una domanda "di teoria". Perchè in linguaggi "nuovi", tipo il C# (non so gli altri) l'ereditarietà multipla è stata eliminata e hanno tirato fuori le interfacce ? Alla fine una classe che implementa più interfacce è come una classe che eredita più classi astratta, o no ? Qualcuno mi può dare una spiegazione ?
Una cosa e' ereditare piu' interfacce, un'altra e' ereditare da piu' classi. Proprio per la differenza tra classi e interfacce ...
Per la domanda iniziale, un esempio classico di interfaccia e' la IUnknown (per consuetudine i nomi di classi si fanno iniziare con C e quelle di interfacce con I) che costituisce la base della gerarchia di interfacce COM di Windows
Da questa deriva la IDispatch, basilare per la gestione degli oggetti COMcodice:class IUnknown { public: virtual HRESULT QueryInterface( REFIID iid, void** ppvObject) = 0; virtual ULONG AddRef() = 0; virtual ULONG Release() = 0; };
codice:class IDispatch: public IUnknown { public: virtual HRESULT GetIDsOfNames( REFIID riid, OLECHAR FAR* FAR* rgszNames, unsinged int cNames, LCID lcid, DISPID FAR* rgDispld ) = 0; virtual HRESULT GetTypeInfo( unsigned int iTinfo, LCID lcid, ITypeInfo FAR* FAR* ppTinfo ) = 0; virtual HRESULT GetTypeInfoCount( unsigned int FAR* pctinfo ) = 0; virtual HRESULT Invoke( DISPD dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS FAR* pDispParams, VARIANT FAR* pVarResult, EXCEPINFO FAR* pExcepInfo, unsinged int FAR* puArgErr ) = 0; };
Sì, ma sostanzialmente le interfacce possono essere considerate un sottoinsieme delle classi. O no ?
Appunto. Quindi perchè le interfacce sì e le classi no ? E' questo il nodo che mi sfugge.Originariamente inviato da oregon
Sono classi particolari
Bhe molte volte, utlizillando DirectX mi ritrovo fuori
typedef interface Blabla *LPBlaBla
"Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)
"Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)
http://xvincentx.netsons.org/programBlog