为什么回答“确定”?
class CTest {
public:
int isitme(CTest& cobj);
};
int CTest::isitme(CTest &cobj)
{
if(&cobj == this)
{
return true;
}
else
{
return false;
}
}
int main()
{
CTest a;
CTest *b = &a;
if(b->isitme(a))
{
cout<<"OK";
}else
{
cout<<"not OK";
}
return 0;
}
最佳答案
因为成员函数隐式接收指向对象的指针作为参数。该指针可在函数体内用作this
指针。
因此,当您这样做时:
b->isitme(a)
成员函数
isitme()
隐式接收指针b
作为参数,并且该指针将被视为函数内部的this
指针。由于
b
指向a
,所以this
将指向a
(毕竟,您正在通过指针isitme()
调用对象a
上的成员函数b
)。由于
a
是作为显式参数传递的,因此a
也是引用cobj
所绑定的对象。因此,采用cobj
的地址可以得到a
的地址。这反过来意味着该表达式:// Address of "a": "cobj" is bound to argument "a" in the function call
// vvvvv
&cobj == this
// ^^^^
// Address of "a": the function is called through a pointer to "a"
评估为
true
。