impl�mentation d'interfaces multiples : limitation de C++ ou du compilo VS2005 ?
Bon, je m'explique ;
suite � une impl�mentation de Garbage Collector enfin bref passons ; je viens de m'apercevoir que l'ordre de d�claration de l'impl�mentation d'interfaces dans une classe � une importance (chose que je n'ai jamais vue en C# et en Java).
Je m'explique, voil� mon exemple de code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
interface I1
{
public :
virtual void SetI1 () = 0;
};
interface IInutil
{
public :
virtual void SetIInutil () = 0;
};
class JeCollectionneCeQuiDerivedeI1
{
public :
void AddElement (I1* param)
{
CString coincoin("coin coin");
}
};
class MaClasseQuiHeriteDesDeuxInterface : public I1, public IInutil
{
public :
MaClasseQuiHeriteDesDeuxInterface (JeCollectionneCeQuiDerivedeI1& jccqdi)
{
jccqdi.AddElement(this);
};
void SetI1 () {};
void SetIInutil () {};
}; |
En voici l'utilisation :
Code:
1 2 3
|
JeCollectionneCeQuiDerivedeI1 jccqddi;
MaClasseQuiHeriteDesDeuxInterface* mcqhddi = new MaClasseQuiHeriteDesDeuxInterface(jccqddi); |
Tout se passe impec quand je passe dans le constructeur de la variable mcqhddi, le this pass� en param�tre de void AddElement (I1* param) a la m�me adresse que this c'est-�-dire adresse de this = adresse de param.
Par contre, si j'inverse l'ordre d'impl�mentation des interfaces dans ma classe :
Code:
1 2 3 4
|
...
class MaClasseQuiHeriteDesDeuxInterface : public IInutil, public I1
... |
alors l� dans le constructeur, je me retrouve avec un pointeur this qui est de 4 bits inf�rieur � la valeur de param. "Ol�, c'est super !!!". Donc il doit y avoir un probl�me de vtbl, mon tableau de pointeur de fonctions virtuelles sur ma classe d�pend de l'ordre de d�claration d'impl�mentation de mes interfaces dans cette classe. Ce qui me para�t plus que bizarre 8O
Je viens de me repencher sur le bouquin "Mieux d�velopper avec C++" et sur le bouquin de Stroujstrup (excusez pour l'orthographe), rien pas d'indice.
Donc si vous pouviez m'�clairer et me dire si vous aviez d�j� eu ce cas-l�.
Ou bien alors quelque-chose m'�chappe et merci de bien vouloir m'�clairer :king: ou alors ... tant pis :aie: