Avec 35 ans de retard

Citation Envoyé par schonai Voir le message
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
struct derive
{
   struct base
   {
      int membreBase;
   } _base;
   int membreDerive;
};
Si j'ai bien compris ce que tu m'a dis je dois pouvoir faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
struct derive varDeriv;
 
int i = varDeriv.membreBase;
Sauf erreur de ma part c'est impossible. Tu es obligé de faire :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
struct derive varDeriv;
 
int i = varDeriv._base.membreBase;
On perd un peu de l'héritage à l'utilisation puisque qu'il faut préciser de qu'elle classe provient la définition de méthode. Après on a une architecture beaucoup plus robuste pour la programmation. A voir ce qui est le mieux =/
Oui, mais :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
struct derive varDeriv;
struct base* pBase = (struct base*) &varDeriv;
int i = pBase->membreBase; // En réalité varDeriv._base.membreBase
devrait fonctionner (et c'est un peu le cas recherché, càd qu'on ne connaît que le type "de base" et on ne manipule donc les données via des pointeurs sur la structure base).
Bien sûr syntaxiquement et sémantiquement c'est pas la même chose, c'est pour ça que je parlais en termes d'agencement en mémoire, d'où le cast. Le standard garantit la validité de ce genre de choses (il me semble, j'en suis quasiment sûr), après je pourrais pas retrouver la citation exacte.