Более того, почему в классе X функции-члены не занимают места в памяти?
Думаю, никто еще не рассмотрел эту часть.Функции-члены класса не хранятся внутри самого объекта, потому что они принадлежат классу, а не объекту.Нет смысла хранить копию функции внутри каждого объекта, поскольку код всегда остается неизменным.
sizeof(X)
возвращает количество байтов, необходимое для хранения экземпляра типа X, а не всего класса,
Кроме того, функция-член сохраняется в памяти как любая другая обычная функция c.Он просто берет указатель на объект, из которого он вызывается:
int X::permute() { return i = i * 47; }
...
someX.permute();
Превращается в:
int permute(X* _x) { return _x->i = _x->i * 47; }
...
permute(&someX);
Идея функций-членов является для нас лишь абстракцией.Единственное, из чего состоит объект, это переменные-члены и, возможно, таблица виртуальных функций.