一:单一继承情况下,父类没有虚函数,子类有虚函数的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;
}