Bonjour,

Dans son tutoriel sur l'héritage en C, http://chgi.developpez.com/c/heritage/ , CGi utilise la méthode suivante:
Quand on veut qu'une structure hérite d'une autre structure, le début de la classe fille doit être le même que celui de la classe mère. Les nouveaux attributs sont ajoutés à la fin.

Exemple:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
struct Mere {
   int a;
   int b;
};
 
struct Fille {
   // membres de Mere
   int a;
   int b;
   // membres de Fille
   int c;
}
Il utilise le polymorphisme:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
struct Mere *m;
struct Fille f = { 1, 2, 3 };
 
m = (struct Mere *) &f;
// utiliser m->a et m->b
Le C garantit que le premier élément de la structure est à l'addresse 0, donc ça doit marcher pour "a" tout le temps.
Ma question est: est-ce que pour les autres éléments de la structure, ça marchera quelque soit le type et le nombre d'attributs, et quelque soit le compilateur ? Parce que le compilateur peut également ajouter des octets de remplissage (padding).