これは、さまざまなクラスのサイズを出力するコードです
#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
Empty class のサイズが 1 Size of empty class object である理由を理解しています。抽象クラスの場合、オブジェクトは仮想関数呼び出しメカニズムを実装するためのポインターを格納します。しかし、他のクラス オブジェクト (NotAbstrClass および MixClass) のサイズはどうでしょうか。