Вот код, который печатает размер различных классовРазмер C++ классов
#include <iostream>
using namespace std;
class EmptyClass
{
};
class AbstractClass
{
public:
virtual void funcOne() = 0;
virtual void funcTwo() = 0;
};
class NotAbstrClass
{
public: int virtFunc(int);
};
class MixClass
{
public:
virtual void clFunc(int);
static int i;
int j;
};
int main()
{
// Print size of class or class objects
cout<<"Size of empty class: "<< sizeof(EmptyClass)<<endl;
cout<<"Size of Abstract class :"<< sizeof(AbstractClass)<<endl;
cout<<"Size of Non Abstract class: "<< sizeof(NotAbstrClass)<<endl;
cout<<"Size of Mix class: "<< sizeof(MixClass)<<endl;
return 0;
}
Выход программы на C++ 11 компилятором
Size of empty class: 1
Size of Abstract class :4
Size of Non Abstract class: 1
Size of Mix class: 8
Я понимаю, почему Пустой класс имеет размер 1 Size of empty class object. Для абстрактного класса объект хранит указатель для реализации механизмов вызова виртуальных функций. Но как насчет размеров других объектов класса (NotAbstrClass и MixClass)?
Поймите, что все SizeOf() говорит вам, по сути зависит от конкретного компилятора в той или иной операционной системы и те особенности Настройки. –
@SebastianRedl: вы правы. Но на данный момент считаю, что я использую 32-битную архитектуру настольного процессора с 32-разрядной ОС. В таком случае вы можете использовать конкретные значения для размера целочисленных типов (4 байта) и типа указателя (4 байта). – nurabha
дубликат http: // stackoverflow.com/questions/4766323/how-to-define-sizeof-class-with-virtual-functions/4766385 # 4766385 – kfsone