2011-10-13 224 views
-3

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

+0

我真的推荐一本好书。它不需要是C++特定的。首先你需要了解面向对象的原则。例如。什么是类,什么是对象。除此之外。 -1为坏的问题。你应该真的学会如何发表可读的问题。 – mkaes

+0

@mkaes,以及爵士,让你觉得我不明白面向对象编程的原理,例如。什么是课堂,什么是对象。就语言而言,我接受它是写得很糟糕,因为我很匆忙 – SegFault

回答

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. 
} 

至于调用函数(对象)(功能),而不是(类)::(功能),我相信你被允许这样做,但你为什么?

相关问题