类静态方法访问它的静态数据成员

Posted

技术标签:

【中文标题】类静态方法访问它的静态数据成员【英文标题】:Class static method access to it's static data members 【发布时间】:2015-02-23 06:16:37 【问题描述】:

这个问题是延伸到:Class method access to it's data members 从这个问题中得出的结论是,每当调用类方法时,它都会隐式传递对象的地址,这有助于它使用“this*”访问类的数据成员。

后续问题是:

类的静态方法如何访问类的静态数据成员?

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

静态数据成员或其地址是否已隐式加载到静态函数堆栈中?

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

【问题讨论】:

没有所谓的“静态函数堆栈”。类静态成员只是名称中带有:: 的全局变量;它们有链接器分配的地址。 【参考方案1】:

原因是两者都没有绑定到该类的实例。

例如

class test

   public:
   static int i=5;
   static int getI()return i;
;

您可以访问i 喜欢:

int a=test::i;

或喜欢

int a=test::getI();

i 存储在程序的全局数据部分。它没有绑定到一个对象,因此它对于创建的每个实例也是相同的。您无需创建class test 的实例即可访问i。 class test 在这种情况下只是一个命名空间。没有记忆魔法。

【讨论】:

以上是关于类静态方法访问它的静态数据成员的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 静态方法不能访问直接

静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?

Java学习笔记八---类的静态变量与静态方法的访问与调用方式

访问静态成员函数中的非静态成员的解决方法

statuc和const

静态类静态方法静态成员和实例成员的比较