对象有不同的功能成员或共享它们?

时间:2014-11-20 06:06:47

标签: c++ class

Rectangle rect, rectb;
rect.set_values (3,4);
rectb.set_values (5,6);
rect.area();
rectb.area();
  

请注意,对rect.area()的调用与调用rectb.area()的结果不同。这是因为Rectangle类的每个对象都有自己的变量width和height,因为它们在某种程度上也有自己的函数成员set_value和对对象自己的成员变量进行操作的区域。

在某种程度上它是什么意思 - ?? 这是否意味着函数成员在类的对象之间共享?

2 个答案:

答案 0 :(得分:1)

  

在某种程度上它是什么意思 - ??这是否意味着函数成员在类的对象之间共享?

使用“在某种程度上”,作者可能打算描述代码是共享的,而数据(成员变量)则不是。成员变量对于每个对象都是唯一的,并且方法获得指向对象数据的指针作为它们的第一个参数(它不是每个方法的参数列表的一部分,但是通过this指针在方法中可以隐式访问) 。通过此指针,相同(共享)代码可以处理不同的数据(同一类的不同实例)。

其他语言(例如Python,其中参数被称为self)需要为每个成员函数显式定义参数。

答案 1 :(得分:1)

是的,类的函数代码只在内存中加载一次,无论该类的对象数是多少。因此,以这种方式,它的功能成员在类的对象之间共享。 (或许该书/网站上的陈述措辞可能更好)。

因此,无论您是呼叫rect.set_values (3, 4)还是rectb.set_values (5, 6),它都是在内存中运行的相同代码,尽管结果可能会有所不同,因为它们使用的值不同(接收的参数和/或数据成员值)。