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

时间:2011-10-13 12:33:11

标签: c++

普通函数(而不是静态函数)在C ++中只有一个类的副本,这意味着所有对象都引用同一个副本。如果是这样,正常功能和静态功能之间有什么区别。另外,我的老师说我们不能使用“(object_name)。(func_name)”表示法调用类的静态函数,但必须使用“class_name ::(func_name)”调用它,而我理解这是合乎逻辑的要做的事情,但就语言而言,我不允许使用(object_name)。(func_name)表示法来调用静态函数吗?最后,我不能在类的构造函数或该类的任何其他函数内初始化类的静态数据成员,但是必须从类外部执行此操作吗?

1 个答案:

答案 0 :(得分:4)

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

至于初始化,你不能在构造函数中执行它,因为调用一个访问静态成员的静态函数需要事先调用构造函数。没有办法保证这一点。您可以更改构造函数中的静态,但必须在其他位置初始化。

想想这个场景:

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)调用函数,我相信你可以这样做,但为什么会这样?