首先,讨论只有一个类的情况,一个空类型对像不包含任何信息,但是必须在内存中占用一定空间,否则无法使用,C++中每个空类占1Byte
#include<iostream>
using namespace std;
class Base
{
public:
private:
};
int main()
{
cout <<"Base "<<sizeof(Base)<<endl;
return 0;
}
当Base类中包含一个构造函数、析构函数和普通成员函数时
#include<iostream>
using namespace std;
class Base
{
public:
Base();
void fun();
~Base();
private:
};
int main()
{
cout <<"Base "<<sizeof(Base)<<endl;
return 0;
}
当Base类中包含数据类型时,要考虑字节对齐(以定义的成员数据中最大的类型为标准对齐)
using namespace std;
class Base
{
public:
Base();
void fun();
~Base();
private:
int a,
double b;
};
int main()
{
cout <<"Base "<<sizeof(Base)<<endl;
return 0;
}
现在,我们创建一个派生类,基类和派生类都为空时
#include<iostream>
using namespace std;
class Base
{
public:
private:
};
class Derive :public Base
{
public:
private:
};
int main()
{
cout <<"Base "<<sizeof(Base)<<endl;
cout<<"Derive "<<sizeof(Derive)<<endl;
return 0;
}
都有普通函数、析构函数和构造函数时
#include<iostream>
using namespace std;
class Base
{
public:
Base();
void fun();
~Base();
private:
};
class Derive :public Base
{
public:
Derive();
void fun();
~Derive();
private:
};
int main()
{
cout <<"Base "<<sizeof(Base)<<endl;
cout<<"Derive "<<sizeof(Derive)<<endl;
return 0;
}
都定义了数据成员时
#include<iostream>
using namespace std;
class Base
{
public:
Base();
void fun();
~Base();
private:
int a;
char b;
double c;
};
class Derive :public Base
{
public:
Derive();
void fun();
~Derive();
private:
int a;
char b;
double c;
};
int main()
{
cout <<"Base "<<sizeof(Base)<<endl;
cout<<"Derive "<<sizeof(Derive)<<endl;
return 0;
}
暂时讨论到这儿,有不足的地方希望大家可以指出来