2015-02-23 183 views
0

这个问题的一个扩展:
Class method access to it's data members
将采取从质询的是,每当一个类的方法被调用时,它隐含通过其帮助对象的地址它使用'this *'来访问类的数据成员。类的静态方法访问的静态数据成员

的跟进问题是:

  • 如何是类的静态方法能够访问类的静态数据成员?

参数保持不变。一个函数只能访问堆栈中加载的局部变量。

  • 静态数据成员或它们的地址是隐式加载到静态函数堆栈上的吗?

  • 如果不是,它是如何工作的?

+0

没有“静态函数堆栈”这样的东西。类静态成员只是全局变量,其名称中包含“::”他们有一个由链接器分配的地址。 – 2015-02-23 06:22:17

回答

0

原因是因为两者都不绑定到该类的实例。

例如,

class test 
{ 
    public: 
    static int i=5; 
    static int getI(){return i;} 
}; 

您可以访问i,如:

int a=test::i; 

或类似

int a=test::getI(); 

i被存储在程序的全局数据部分。它不受限于一个对象,因此它对于创建的每个实例都是相同的。您可以访问我,而无需创建class test的实例。 class test仅仅是这种情况下的命名空间。没有记忆魔法。