PDA

Visualizza la versione completa : [C++] Cosa è un'interfaccia?


XWolverineX
17-12-2005, 12:10
Like the title

pprllo
17-12-2005, 12:46
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.

oregon
17-12-2005, 13:24
Una interfaccia e' una classe che contiene metodi pubblici puri virtuali, non contiene metodi statici, non contiene membri dati.

pprllo
17-12-2005, 13:34
Come giustamente sottolineato da oregon, le funzioni devono essere tutte virtuali pure pubbliche non statiche.

pprllo
17-12-2005, 13:36
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 ?

oregon
17-12-2005, 13:43
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



class IUnknown
{
public:
virtual HRESULT QueryInterface(
REFIID iid,
void** ppvObject) = 0;
virtual ULONG AddRef() = 0;
virtual ULONG Release() = 0;
};


Da questa deriva la IDispatch, basilare per la gestione degli oggetti COM



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;
};

pprllo
17-12-2005, 14:02
Sì, ma sostanzialmente le interfacce possono essere considerate un sottoinsieme delle classi. O no ?

oregon
17-12-2005, 14:29
Sono classi particolari

pprllo
17-12-2005, 15:00
Originariamente inviato da oregon
Sono classi particolari
Appunto. Quindi perchè le interfacce sì e le classi no ? E' questo il nodo che mi sfugge.

XWolverineX
17-12-2005, 17:38
Bhe molte volte, utlizillando DirectX mi ritrovo fuori

typedef interface Blabla *LPBlaBla

Loading