#include <iostream>
using namespace std;
class Base
{
void f(){};
};
int main()
{
cout << sizeof(Base) << endl; //1
return 0;
}
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
class Base
{
void f(){};
};
class Derived2 : public virtual Base
{
void d2();
};
int main()
{
cout << sizeof(Derived2) << endl; //8 64位下 有一个指向虚基类的指针
return 0;
}
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
class Base
{
virtual void f(){};
};
class Derived1 : public Base
{
void d1();
};
class Derived2 : public Base
{
virtual void d2();
};
int main()
{
cout << sizeof(Base) << endl; //8 64位下 有一个指向虚函数表的指针
cout << sizeof(Derived1) << endl; //8 64位下 有一个指向虚函数表的指针
cout << sizeof(Derived2) << endl; //8 64位下 有一个指向虚函数表的指针
return 0;
}
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
class Base
{
virtual void f(){};
};
class Derived1 : public Base
{
void f1();
};
class Derived2 : public Base
{
virtual void f2();
};
class Derived3 : public virtual Base
{
virtual void f3();
};
int main()
{
cout << sizeof(Base) << endl; //8 64位下 有一个指向虚函数表的指针
cout << sizeof(Derived1) << endl; //8 64位下 有一个指向虚函数表的指针
cout << sizeof(Derived2) << endl; //8 64位下 有一个指向虚函数表的指针
//虚继承 并且有虚函数 跟编译器有关系
//vs是24(64位) 基类的虚函数表指针 自己的虚函数表指针 指向虚基类的指针
//gcc是8(64位) ???有点疑惑
cout << sizeof(Derived3) << endl;
return 0;
}
有成员变量的类
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
class Base
{
public:
int a;
int b;
virtual void f(){};
};
class Derived1 : public Base
{
void f1();
};
class Derived2 : public Base
{
virtual void f2();
};
int main()
{
//4 + 4 + 8
cout << sizeof(Base) << endl;
cout << sizeof(Derived1) << endl;
cout << sizeof(Derived2) << endl;
return 0;
}
静态成员变量不属于类,计算类大小的时候不用考虑
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
class Base
{
public:
int a;
int b;
static int x;
virtual void f(){};
};
class Derived1 : public Base
{
void f1();
};
class Derived2 : public Base
{
virtual void f2();
};
int main()
{
//4 + 4 + 8
cout << sizeof(Base) << endl;
cout << sizeof(Derived1) << endl;
cout << sizeof(Derived2) << endl;
return 0;
}
原文:https://www.cnblogs.com/Trevo/p/13560780.html