虚继承类内存大小计算

来源:互联网 发布:telnet 端口号不通 编辑:程序博客网 时间:2024/06/07 12:06

参考文档:http://blog.csdn.net/hackbuteer1/article/details/7883531


计算公式基于64-bit os,指针大小为8


问题一:含有虚函数类继承的类大小计算


#include<iostream>using namespace std;class A{};class B{    char ch;    virtual void func0(){}};class C{    char ch1;    char ch2;    virtual void func(){}    virtual void func1(){}};class D:public A,public C{    int d;    virtual void func(){}    virtual void func1(){}};class E:public B,public C{    int e;    virtual void func0(){}    virtual void func1(){}};int main(){    cout<<"A="<<sizeof(A)<<endl;            //  空类大小为1    cout<<"B="<<sizeof(B)<<endl;           //   虚函数占用一个虚函数类表指针位置 大小为8   数据对齐    输出16    cout<<"C="<<sizeof(C)<<endl;           //   两个虚函数占用一个虚函数类表指针位置 大小为8   数据对齐    输出16    cout<<"D="<<sizeof(D)<<endl;           //   两个基类占用一个虚函数类表指针位置 大小为8  int占内存4 数据对齐    输出16    cout<<"E="<<sizeof(E)<<endl;            //   两个基类占用两个虚函数类表指针位置 大小为16  int占内存4 char 2 数据对齐    输出24    return 0;}

问题二:含有虚基类和虚函数的计算


#include<iostream>using namespace std;class A{    int a;};class B: virtual public A{private:    int b;public:    virtual void func1(){}    virtual void func2(){}};class C:virtual public A{private:    int b2;public:    virtual void func3(){}    virtual void func4(){}};class D:public B,public C{private:    int d;public:    virtual void func1(){}    virtual void func3(){}};int main(){    cout<<"A="<<sizeof(A)<<endl;            //   大小为int大小4    cout<<"B="<<sizeof(B)<<endl;           //   虚函数占用一个虚函数类表指针位置 大小为8   两个int 8    输出16    cout<<"C="<<sizeof(C)<<endl;           //   虚函数占用一个虚函数类表指针位置 大小为8   两个int 8    输出16    cout<<"D="<<sizeof(D)<<endl;           //   两个基类占用两个虚函数类表指针位置 大小为16 一个虚基类表 大小为8  int占内存16 数据对齐    输出40    return 0;}

问题三:单虚继承

#include<iostream>using namespace std;class A{public:    virtual void func1(){}    virtual void func2(){}private:    char ch[3];};class B: virtual public A{public:    virtual void func3(){}    virtual void func4(){}};int main(){    cout<<"A="<<sizeof(A)<<endl;            //   大小为int大小4    cout<<"B="<<sizeof(B)<<endl;           //   单继承有一个虚函数类表指针位置 大小为8  三个char 3     输出16    return 0;}


0 0
原创粉丝点击