c++类的函数是否对所有对象只有一个副本?

Does functions of a C++ class have only one copy for all objects?

本文关键字:对象 有一个 副本 函数 是否 c++      更新时间:2023-10-16

c++中的普通函数(而不是静态函数)是否对一个类只有一个副本,这意味着所有对象都引用同一个副本?如果是这样,正常函数和静态函数的区别是什么?此外,我的老师说我们不能使用"(object_name).(func_name)"符号调用类的静态函数,但必须使用"class_name::(func_name)"来调用它,虽然我明白这是合乎逻辑的事情,但就语言而言,我不允许使用(object_name).(func_name)符号调用静态函数吗?最后,是否可以在类的构造函数或该类的任何其他函数中初始化类的静态数据成员,而必须从类外部初始化?

如果只有一个副本,您的意思是所有函数在内存中具有相同的位置,那么是的,您是对的。不同之处在于,静态函数不需要实例化对象才能调用。这也意味着不能访问类的其他非静态成员。

至于初始化,不能在构造函数中进行,因为调用访问静态成员的静态函数需要事先调用构造函数。这是无法保证的。可以在构造函数内部修改静态,但必须在其他地方初始化。

考虑这个场景:

class A
{
static int x;
public:
   A()
   {
      x = 3;
   }
   static int getX()
   {
      return x;
   }
}
int main()
{
   A::getX(); //what would x be here? It hasn't been initialized since A() was not called.
}

至于用(object).(function)而不是(class)::(function)调用函数,我相信你可以这样做,但你为什么要这样做呢?

相关文章: