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;
}
13万+

被折叠的 条评论
为什么被折叠?



