两个类的合作
MyClass 有一个 Method()参数是另一个类对象
 里面调用参数类对象的Method()函数,把自己作为一个
 指针传过去MyClass::Method(OtherClass obj);
OtherClass::Method(MyClass* p);
两个函数的原型应该类似上面//是无名对象吗?
不是,this是调用Method() 的MyClass类的实例的指针//调用是递归调用吗?递归需要强制转换参数的,上面obj.Method(this)显然没有
所以不是递归

解决方案 »

  1.   

    如果两个类都继承同一个类,当使用父类的函数时,这个函数就需要一个隐藏的this指针来区分到底是哪个子类调用的。一般来说,this是个隐藏的对象指针。例如
    class CAnimal
    {
    public:
        int m_sex;
    public:
        void SetSex(int sex){m_sex = sex}
    };class CCat: public CAnimal
    {
    };class CMouse: public CAnimal
    {
    };int main(int argc, char* argv[])
    {
        CMouse micky; 
        CCat kitty;
        micky.SetSex('M');
        micky.SetSex('F');
        return(0);
    }
    如果用Debug来看micky.SetSex('M')的执行情况,它绝对是填到micky的m-sex变量,不会错乱。原因就是因为有一个隐藏的this指针。看实际的代码程序可知micky.SetSex('M', (CMouse*)micky);kitty.SetSex('F', (CCat*)kitty);void SetSex(int sex,(CAnimal*)this)
    {
        this->m_sex = sex;
    }这是书上的解释,有时候this的意思还是指向当前类的意思,例如:
    VERIFY( m_wndSplitter.CreateStatic( this, 1, 2 ) );这个this 就是指向当前你的程序的类的一个客户视图对象,但这个对象的名字并不存在,所以就用this来代替。
      

  2.   

    Example:
    MyClass::Method(OtherClass obj);
    {
      TRACE("My Class Method()\n");
      obj.Method(this);
    }
    MyClass::Method2();
    {
      TRACE("My Class Method2()\n");
      obj.Method(this);
    }
    OtherClass::Method(MyClass* p);
    {
      TRACE("Other Class\n");
      p->Method2();
      //p->Method(*this); // 递归,需要一个退出条件
    }
    MyClass my;
    OtherClass other;my.Method(other);//你观察一下Debug时Output 窗口