1 | class Point3d { |
两种访问方式,在x属于一个virtual base class的member的时候有差异,否则都是编译期就确定的(一次访问)
1 | origin.x = 0.0; |
继承与Data member
只要继承:多个继承,可能会有多个padding,造成浪费
加上多态
- 增加vptr
- 增加vtbl
- 构造函数中设定vptr初始值
- 析构函数中删除vptr
多重继承:多重继承下,转换指针,将基地址加上中间的base class object大小
虚继承:两种方式,第二种使用正值负值在vtable中索引virtual subobject的偏移量,减少空间
指向Data member的指针
1 | &Point3d::z; |
得到z坐标在class object中的offset
DataMember指针
1 |
|
虚继承:
看起来在clang上是有个单独的vbtable,而不是在vtable的前边
1 |
|