今天看到一句话:单继承时,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指针会指向派生类,希望各位帮我解决一下,谢谢了~~~

解决方案 »

  1.   

    为什么这个this指针会指向派生类,希望各位帮我解决一下,谢谢了~~~
    =========
    你上面的代码this是不可能指向派生类的,你的Base child;对象在主函数中都没有应用。
      

  2.   

    回楼上的,不好意思应该是Child child,我忘记了
      

  3.   

    没看明白,你的Child child;放在哪儿,child准备在哪儿用呢?
      

  4.   

    class Base;
    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框架的原理差不多~~~
      

  5.   

    你上面那个就是一个错误的代码,得出错误的结果很正常。
    比如我在上面加一行变成:
    ....Child child;
    Base ba;
    int _tmain(int argc, _TCHAR* argv[])
    {
    m_base->Draw();
    return 0;
    }
    结果就有可能变成:base class。
      

  6.   

    Base* m_base;就是一个野指针,它只不过指向了child而已,我在上面加一个全局变量,Base ba;这个野指针就有可能指向ba