一:单一继承情况下,父类没有虚函数,子类有虚函数的this指针偏移分析。
#include <iostream> using namespace std; class base { public: int m_bi = 0; base() { printf("base this is %p\n", this); } }; class A :public base { public: int m_i = 0; int m_j = 0; public: virtual void fun(){ } A() { printf(" A this is %p\n", this); } }; int main() { A a; cout<<sizeof(a)<<endl; printf("A::m_bi = %d\n", &A::m_bi); printf("A::m_i = %d\n", &A::m_i); printf("A::m_j = %d\n", &A::m_j); a.m_bi = 3; a.m_i = 2; a.m_j = 4; return 0; }
二:单一继承情况下,父类有虚函数,子类也有虚函数的this指针偏移分析(不存在this指针偏移了)
#include <iostream> using namespace std; class base { public: int m_bi = 0; virtual void fun0() { } base() { printf("base this is %p\n", this); } }; class A :public base { public: int m_i = 0; int m_j = 0; public: virtual void fun(){ } A() { printf(" A this is %p\n", this); } }; int main() { A a; cout<<sizeof(a)<<endl; printf("A::m_bi = %d\n", &A::m_bi); printf("A::m_i = %d\n", &A::m_i); printf("A::m_j = %d\n", &A::m_j); a.m_bi = 3; a.m_i = 2; a.m_j = 4; return 0; }