1、空类的存储空间计算
大小为1,本来应该为0,但是声明该类型的对象的时候,必须在内存中占一定的空间,否则无法使用这些对象,至于占多少内存,由编译器决定
#include<iostream>
using namespace std;
class CBox{
};
int main(){
CBox boxobj;
cout<<sizeof(boxobj)<<endl;//输出1
return 0;
}
2、只有成员变量的类的存储空间计算
#include<iostream>
using namespace std;
class CBox{
int length,width,height;
};
int main(){
CBox boxobj;
cout<<sizeof(boxobj)<<endl;//输出12
return 0;
}
3、有成员变量和静态成员变量
静态数据成员不占对象的内存
静态数据成员不占对象的内存
#include<iostream>
using namespace std;
class CBox{
int length,width,height;
static int count;
};
int main(){
CBox boxobj;
cout<<sizeof(boxobj)<<endl;//输出12
return 0;
}
4、只有一个成员函数
成员函数不占空间
#include<iostream>
using namespace std;
class CBox{
int foo();
};
int main(){
CBox boxobj;
cout<<sizeof(boxobj)<<endl;//输出1
return 0;
}
5、有构造函数和析构函数
构造函数和析构函数不占空间
#include<iostream>
using namespace std;
class CBox{
public:
CBox(){};
~CBox(){};
};
int main(){
CBox boxobj;
cout<<sizeof(boxobj)<<endl;
return 0;
}
6、类中有虚的析构函数
为了支持虚函数,会产生额外的复旦,这正是指向虚函数表的指针的大小,64位上占8buye,32位占4
#include<iostream>
using namespace std;
class CBox {
public:
CBox() {};
virtual ~CBox() {};
};
int main() {
CBox boxobj;
cout << sizeof(boxobj) << endl;//输出4,一个指针的大小
return 0;
}
7、继承孔磊和多重继承
①继承不改变不改变大小
②虚继承如果与基类虚函数一样,则大小在基类大小情况+4,如果出现新的虚函数+8
#include <iostream>
using namespace std;
class Base
{
public:
virtual void f();
virtual void g();
virtual void h();
};
class Derived1 : public Base
{
public:
virtual void f1();
virtual void g1();
virtual void h1();
};
class Derived2 :public Base
{
public:
virtual void f();
virtual void g1();
virtual void h1();
};
class Derived3 :virtual public Base
{
public:
virtual void f1();
virtual void g1();
virtual void h1();
};
class Derived4 :virtual public Base
{
public:
virtual void f();
virtual void g1();
virtual void h1();
};
class Derived5 :virtual public Base
{
public:
virtual void f();
virtual void g();
virtual void h();
};
class Derived6 :virtual public Base
{
};
int main()
{
cout << sizeof(Base) << endl; //4
cout << sizeof(Derived1) << endl; //4
cout << sizeof(Derived2) << endl; //4
cout << sizeof(Derived3) << endl; //12
cout << sizeof(Derived4) << endl; //12
cout << sizeof(Derived5) << endl; //8
cout << sizeof(Derived6) << endl; //8
return 0;
}