Je pensais au mécanisme de polymorphisme en C++ et je ne peux pas comprendre une chose. Ici, j'ai très simple morceau de code avec une classe:Polymorphisme en C++ idée de vtable (liaison dynamique)
#include <iostream>
using namespace std;
class A
{
public:
int x;
void fun1();
double fun2(int, char*);
void fun3(double, float[]);
};
int main()
{
cout << sizeof(A) << endl;
return 0;
}
Sur la console, il y aura la taille de l'objet imprimé int (x) - il est évident. Si je modife ma classe en ajoutant un mot-clé virtuel, la taille changera car les compilateurs ajoutent un pointeur au tableau (vtable) des fonctions virtuelles. Mais comment est-il possible que la taille de ma classe ne change pas en écrivant des déclarations de nouvelles méthodes virtuelles de signatures complètement différentes? Je veux dire que:
void (*(tab[100]))(int, double, char*);
Il est une définition de tableau qui est obligé de a adresses de fonctions avec la signature:
void fun(int, double, char*);
Et que ce type de fonctions peuvent être ajoutées à ce tableau, alors pourquoi peu importe de type de classe de méthode virtuelle contient un seul pointeur vers un tableau virtuel? Où ai-je fait une erreur dans ma logique?
Pour clarifier: La vtable ne fait pas partie de chaque instance de classe; c'est comme un membre statique et n'existe qu'une seule fois. –