zoukankan      html  css  js  c++  java
  • 【C/C++】【类和对象】计算类所占的字节数

    空类

    空类

    #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;
    }
    

    多重继承

    #include <iostream>
    #include <algorithm>
    #include <string.h>
    using namespace std;
    
    class Base
    {
        virtual void f() {};
    };
    
    class Derived1
    {
        virtual void f1() {};
    };
    
    class Derived2 : public Base, Derived1
    {
        virtual void f2() {};
    };
    
    
    int main()
    {
        cout << sizeof(Base) << endl; //8 64位下 有一个指向虚函数表的指针
        cout << sizeof(Derived1) << endl; //8 64位下 有一个指向虚函数表的指针
        cout << sizeof(Derived2) << endl; //16 64位下 多个虚函数表指针 ??? 
        return 0;
    }
    
  • 相关阅读:
    27、BLASTN的参数
    6、R语言绘制带errorbar 的柱状图
    26、HDF5 文件格式简介
    25、转录本(transcript)组成(gtf文件的第三列)
    6、perl创建模块(Exporter)及路径 引用 嵌套 查询模块
    24、嵌合体序列Chimeras
    24、sam- 详解
    22、IDP-ASE
    21 、GPD-PSL-VCF
    EasyUI 中easyui-textbox和easyui-searchbox文本框的点击事件。
  • 原文地址:https://www.cnblogs.com/Trevo/p/13560780.html
Copyright © 2011-2022 走看看