继承(五)

来源:互联网 发布:seo一专员 编辑:程序博客网 时间:2024/06/15 05:00

1.类/对象大小计算

    (1)结构体对齐原则

    (2)与数据成员有关,与成员函数无关

    (3)与静态数据成员无关

    (4)虚继承对类的大小的影响

    (5)虚函数对类的大小的影响

2.虚基类表

     (1)virtual base table

               [1]本类地址与虚基类表指针地址的差

               [2]虚基类地址与虚基类表指针地址的差

     (2)virtual base table pointer(vbptr)

              



#include <iostream>using namespace std;class BB {public:int bb_;};class B1 : virtual public BB {public:int b1_;};class B2 : virtual public BB {public:int b2_;};class DD : public B1, public B2 {public:int dd_;};int main() {cout << "BB= " << sizeof(BB) << endl;cout << "B1= " << sizeof(B1) << endl;cout << "DD= " << sizeof(DD) << endl;B1 b1;long** p;cout << "&b1= " << &b1 << endl;cout << "&b1.bb_= " << &b1.bb_ << endl;cout << "&b1.b1_= " << &b1.b1_ << endl;p = (long**)&b1;cout << p[0][0] << endl;cout << p[0][1] << endl;DD dd;cout << "&dd= " << &dd << endl;cout << "&dd.bb_= " << &dd.bb_ << endl;cout << "&dd.b1_= " << &dd.b1_ << endl;cout << "&dd.b2_= " << &dd.b2_ << endl;p = (long**)ⅆcout << p[0][0] << endl;cout << p[0][1] << endl;cout << p[2][0] << endl;cout << p[2][1] << endl;cout << sizeof(long*) << endl;cout << sizeof(long) << endl;BB* pp;pp = ⅆcout << pp->bb_ << endl;  // 通过间接访问,这需要运行时的支持return 0;}