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;
    }
    
  • 相关阅读:
    630. Course Schedule III
    20151:补足程序1
    5w5:第五周程序填空题1
    621. Task Scheduler
    452. Minimum Number of Arrows to Burst Balloons
    435. Non-overlapping Intervals
    402. Remove K Digits
    406. Queue Reconstruction by Height
    376. Wiggle Subsequence
    122. Best Time to Buy and Sell Stock II
  • 原文地址:https://www.cnblogs.com/Trevo/p/13560780.html
Copyright © 2011-2022 走看看