有虚继承的类其有几个虚继承的基类则该类就有几个虚表

对于下面的测试代码(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  类继承了其基类的相应的虚表,并进行了修改(有虚函数的重写则进行覆盖,对每一个有相应虚函数的基类都进行覆盖,这也是多态的原因,无虚函数的重写则将派生类的虚函数添加到第一个基类的虚表的后面,这种没有多态.)//

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值