si la classe B hérite de la classe A, alors la taille de B sera plus grande que celle de A si et seulement si au moins un membre de données est ajouté, et ne sera pas modifiée par rapport à la quantité de membres de fonction.
Oui c'est correct. (si B n'implémente pas d'autres méthodes). Chaque instance de classe a une copie des membres de données et un pointeur vers une table de fonctions membres où ils sont réellement stockés.
Le code des fonctions membres est partagé entre différentes instances de la même classe. Si B ne remplace pas une fonction membre de la classe de base A, A et B peuvent partager les mêmes méthodes. Lorsque vous remplacez une fonction membre dans une sous-classe, vous modifiez essentiellement ce mécanisme, créant une nouvelle définition de la fonction membre remplacée, disponible uniquement pour la sous-classe où vous l'avez définie (par exemple, B).
Normalement, une fonction membre est liée au moment de la compilation. Ainsi, si vous avez une instance de la sous-classe B référencée par l'intermédiaire d'un pointeur vers la classe de base A, et que vous appelez une fonction membre foo() définie dans les deux classes, la fonction appelée sera celle implémentée dans la classe de base. Vous pouvez forcer une fonction membre à être liée au moment de l'exécution en la déclarant virtuelle (la fonction membre appelée sera celle du type réel de la classe pointée via le pointeur de base). Cela entraînera l'utilisation d'une table supplémentaire (table des méthodes virtuelles, vtable) pour stocker les méthodes virtuelles, et une double indirection de pointeur pour chaque appel.