在一个简单的Python类
中class Spam:
def __init__(self, num):
self.num = num
def printMsg(self, msg):
print (msg)
当我写行
时gotAny = Spam(2)
gotAny.printMsg("We are the knights who say ni")
在每个成员函数中,一个隐式self
参数作为实际调用该函数的实例传递,因此该方法知道调用者的方式足够清楚。
现在在C ++中,我们从未在方法定义中添加额外的self
参数,这在两个方面给我带来了麻烦:
this
指针,但它只会让事情变得更加神秘。 this
指针既不是类成员也不作为参数传递,那么this
如何在成员函数定义中存在? 答案 0 :(得分:1)
实际上,对象的this
指针不是对象本身的一部分。因此,在sizeof(Spam)
中,this
的大小未添加到班级的大小中。
实际发生的事情与Python处理它的方式非常相似(或恕我直言,因为它隐藏了这个实现细节)。当为对象调用非静态成员函数时,对象的地址被编译器作为隐藏参数传递给函数。
所以在你的例子中
gotAny.printMsg("We are the knights who say ni");
可以这样阅读:
// corrected version by juanchopanza
Spam::printMsg(&gotAny, "We are the knights who say ni");