“该”指针如何巧合指向不同的对象?
|
假设我有一堂课:
class test {
public:
void print();
private:
int x;
};
void test::print()
{
cout<< this->x;
}
我有这些变量定义:
test object1;
test object2;
当我呼叫object1.print()
时,this
碰巧存储了object1
的地址,所以我从object1
打印中得到了x
,当我呼叫object2.print()
时,this
碰巧存储了地址object2
,而我从object2
得到了get5ѭ。它是怎么发生的?
没有找到相关结果
已邀请:
5 个回复
苦诫
有一些
全局函数,所以当你写
在您的代码中,编译器将插入对
这样,成员函数就可以知道“当前”对象的地址。
呈辖玫割善
这使您可以编写类似
现在,实际上发生的是,使用额外的指针参数调用成员函数
和
,它们指向在其上调用该函数的对象。该指针在方法内部称为“ 3”。 the3ѭ指针的类型不同,这取决于该方法是否为
(如
)(与(20ѭ一样)。 您也可以自己做类似的事情,请考虑:
你可以这样写代码
注意,对于
函数,
指针的类型为
,因此指针本身为
,而且指向的对象也是!这就是为什么您不能在
方法内更改成员变量的原因-
指针的类型禁止使用该变量。可以使用
关键字解决此问题(我不想过分跟踪,所以我宁愿不解释它的工作原理),甚至可以使用
来解决:
我之所以要提到它,是因为它表明
并不像它看起来的那样特殊,并且这种特殊的hack通常比制作成员变量
更好,因为此hack是一个函数的局部变量,而
则使对于该类的所有“ 24”方法可变的变量。
挂帘妈乡
,则
。如果您进行
,则
。
郡晒景沧
对于不同的对象具有不同的值
蹄渭信妥扳