对于下面的测试代码(64位系统):C类继承了A B 均为虚类,所以在结果中sizeof(C) 结果为32
#include<iostream>
using namespace std;class A
{
virtual void test()
{}
private:
int a;
};
class B
{
virtual void test()
{}
float b;
};
class C:public A ,public B
{
virtual void test()
{}
static double c; //静态成员属于类不属于对象,所以sizeof(C) 时,不计算在内
};
struct A1
{
char a;
int b;
double c;
};
struct A2
{
int b;
double c;
char a;
};
int main()
{
C c;
cout<<"int = "<<sizeof(int)<<endl;
cout<<"int* = "<<sizeof(int*)<<endl;
cout<<sizeof(c)<<endl;
cout<<"A " <<sizeof(A)<<endl; //16
cout<<"B="<<sizeof(B)<<endl; //16
cout<<"-------------"<<endl;
cout<<sizeof(A1)<<endl;
cout<<sizeof(A2)<<endl;
}
tianxintong@txt:~/git/shujia/RB_tree$ ./tt
int = 4
int* = 8
32
A 16
B=16
-------------
16
24
分析: C 类继承了A 类里有一个虚表指针和一个int,字节对齐以后就是16个字节,B类中有一个float和一个虚表指针,为16字节,而在C 类继承了其基类的相应的虚表,并进行了修改(有虚函数的重写则进行覆盖,对每一个有相应虚函数的基类都进行覆盖,这也是多态的原因,无虚函数的重写则将派生类的虚函数添加到第一个基类的虚表的后面,这种没有多态.)//