今天看到一句话:单继承时,this指针跳转的问题,这话什么意思?
class Base;
Base* m_base;
class Base
{
public:
Base(){m_base = this;}
virtual ~Base(){};
virtual void Draw(){cout<<"base class"<<endl;}
};class Child:private Base
{
public:
Child(){};
virtual ~Child(){};
virtual void Draw(){cout<<"child class"<<endl;}
};Base child;int _tmain(int argc, _TCHAR* argv[])
{
m_base->Draw();
return 0;
}
为什么这个this指针会指向派生类,希望各位帮我解决一下,谢谢了~~~
class Base;
Base* m_base;
class Base
{
public:
Base(){m_base = this;}
virtual ~Base(){};
virtual void Draw(){cout<<"base class"<<endl;}
};class Child:private Base
{
public:
Child(){};
virtual ~Child(){};
virtual void Draw(){cout<<"child class"<<endl;}
};Base child;int _tmain(int argc, _TCHAR* argv[])
{
m_base->Draw();
return 0;
}
为什么这个this指针会指向派生类,希望各位帮我解决一下,谢谢了~~~
=========
你上面的代码this是不可能指向派生类的,你的Base child;对象在主函数中都没有应用。
Base* m_base;
class Base
{
public:
Base(){m_base = this;}
virtual ~Base(){};
virtual void Draw(){cout<<"base class"<<endl;}
};class Child:public Base
{
public:
Child(){};
virtual ~Child(){};
virtual void Draw(){cout<<"child class"<<endl;}
};Child child;int _tmain(int argc, _TCHAR* argv[])
{
m_base->Draw();
return 0;
}这个代码,其实就是MFC框架的原理差不多~~~
比如我在上面加一行变成:
....Child child;
Base ba;
int _tmain(int argc, _TCHAR* argv[])
{
m_base->Draw();
return 0;
}
结果就有可能变成:base class。