class B:public A{virtual int f(){};};
还是sizeof的题。
char var[10]
int test(char var[])
{
return sizeof(var)
};
答案:返回:4. 原因:var[]等价于*var,退化成一个指针了。
空类的大小:
class A{};
class A2{};
class B:public A{};
class C:public virtual B{};
class E:public virtual B{};
class F:public C,public E{};
class D:public A,public A2{};
int main(int argc,char *argv[])
{
cout<<"sizeof(A):"<<sizeof(A)<<endl;
cout<<"sizeof(B):"<<sizeof(B)<<endl;
cout<<"sizeof(C):"<<sizeof(C)<<endl;
cout<<"sizeof(D):"<<sizeof(D)<<endl;
cout<<"sizeof(E):"<<sizeof(E)<<endl;
cout<<"sizeof(F):"<<sizeof(F)<<endl;
return 0;
}
输出:依次为:1 1 4 1 4 8 。空类为1,单一继承和多重继承都是1。但是虚拟继承设计到虚表(虚指针),所以C ,E虚拟继承自B,大小为4,F大小为8.若:
class B:public A{virtual int f(){};};
则:1 4 8 1 8 12