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