1. c++对象的数据布局
sizeof(类或对象) = 非静态的数据成员 + _vptr。
2. 第23行的(*t).P()调用的是TT的,这种写法倒是有点意外~
在子类给基类赋值时由于有数据切割导致虚表被改,最后调用的是基类成员变量。这里没有赋值过程,(*t)没有改变它指向的内容,它只是寻址。
3. c++的多态为什么要用指针或引用?因为直接赋值会修改vptr指向的内容,而指针或引用不会。
1. c++对象的数据布局
sizeof(类或对象) = 非静态的数据成员 + _vptr。
2. 第23行的(*t).P()调用的是TT的,这种写法倒是有点意外~
在子类给基类赋值时由于有数据切割导致虚表被改,最后调用的是基类成员变量。这里没有赋值过程,(*t)没有改变它指向的内容,它只是寻址。
3. c++的多态为什么要用指针或引用?因为直接赋值会修改vptr指向的内容,而指针或引用不会。