静态成员函数没有this指针,是怎么实现被对象访问的。

如题所述

类的静态函数被该类所有的实例所共享,因而没有this指针,不能访问类的非静态成员,示例如下:
class cls
{
plublic:
cls(){ m_value = 0;};
virtual ~cls(){};
int m_value;
static int m_static_value; //静态成员变量
static int foo(); //静态函数
int foo2();
};
int cls::foo()
{
++cls::m_static_value; // 类的静态函数访问类的静态成员变量
}
int cls::foo2()
{
++m_value;
}
int cls:m_static_value = 0;
cls var;
var.foo2(); //调用类的非静态函数
cls::foo(); //调用类的静态成员函数
cls var1; // var1的m_static_value 此时为1,因为静态成员变量,被类cls的所有实例所共享
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-24
有两种方法:
例子:
class C
{
public:
static int func();
};
int main()
{
C cs;
}
方法1,因为类的静态成员函数还是在类中定义,所以属于该类。cs.func();可以调用该函数。
方法2,静态函数相当于有全局的生命周期,因为属于类C,所以可以用如下:C::func();
纯手打望采纳
第2个回答  2020-01-10
讲下this指针的作用,应该能帮助理解这个问题。
1:先讲下为什么非静态成员函数会有一个隐藏的this指针
如果对同一个类定义了n个对象,则有n组同样大小的空间以存放n个对象中的数据成员。但是,不同对象都调用同一个函数代码段。
那么,当不同对象的成员函数引用数据成员时,怎么能保证引用的是所指定的对象的数据成员呢?
这里就得this指针出马了
this指针是类的一个自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,指向被调用函数所在的对象。全局仅有一个this指针,当一个对象被创建时,this指针就存放指向对象数据的首地址。

2:静态成员函数没有this指针。
静态成员函数被所有的类对象所共享,就是说对同一个类定义了n个对象,这n个对象都调用同一个静态成员函数代码段(非静态成员函数也是被共享)。
静态成员变量也是被所有的类对象所共享,就是说对同一个类定义了n个对象,这n个对象都共享同一个静态变量的内存区
静态成员函数只能直接访问静态成员变量(静态成员函数也能通过对象间接访问非静态成员变量),
这说明什么?
说明我们在用静态成员函数直接访问静态成员变量的时候,根本不需要this指针来区分同一个类定义的n个对象,因为这n个对象都共享同一个静态成员变量内存区。

3:this指针的目的是区分同一个类的不同对象的数据区,而不是用于对象访问自己的成员函数。
只要是在类中定义的函数,不管是静态成员函数,还是非静态成员函数,都可以被对象访问。
第3个回答  2012-12-24
静态成员函数可以独立访问 不需要创建类对象
相似回答