调用成员函数的类实例:C ++与Python语法

时间:2014-04-03 20:36:48

标签: python c++

在一个简单的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如何在成员函数定义中存在?

1 个答案:

答案 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"); 

Source