Bonjour à tous,


J'ai une classe de ce style :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
class A
{
public:
   A(B* pB) : m_pB(pB){}
 
   operator B*()
   {
       return m_pB;
   }
 
private:
   B* m_pB;
}
Dont C dérive :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
class C : public A
{
 
}
Sauf que je n'arrive pas à convertir implicitement C en B :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
C* pC = [...];
A* pA = pC; // Fonctionne
B* pB = pA; // Fonctionne (utilise la conversion implicite)
 
// Mais
C* pC = [...];
B* pB = pC; // Erreur : Impossible de convertir (error C2440)
Est-ce que c'est normal ? Y-a-il un contournement autre que de faire une méthode "B* GetB()" dans A, à appeler sur C"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
C* pC = [...];
B* pB = pC->GetB();

Merci beaucoup,

A bientôt