×

静态成员函数指针

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

admin admin 发表于2024-05-18 05:13:37 浏览17 评论0

抢沙发发表评论

本篇文章给大家谈谈静态成员函数指针,以及静态成员函数没有this指针,是怎么实现被对象访问的对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

本文目录

静态成员函数没有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的所有实例所共享

静态成员指针怎么初始化

除了静态整形常数,其他的静态成员只能在类外初始化

struct Case{ static IndividualCase *MyCase; static void CreatList(IndividualCase *);};  

IndividualCase*  Case :: MyCase=NULL;  //在类外初始化

静态成员函数指针如何初始化

假设你的类为CX,静态成员函数指针声明为:static double(*m_pfnFunc)(int, int);则初始化为:double (*CX::m_pfnFunc)(int, int) = NULL;

如何从静态成员函数调用成员函数的指针

通常不建议这样做哦。这样做通常意味着设计上有严重的缺陷。

因为:静态成员函数是不需要类的对象就可以调用的。类的对象都不存在当然不能直接调用了。

如果一定要调用,你可以用以下三种方式,创建一个类对象在进行调用

1、用参数传递进一个内的对象;

2、在静态成员函数中创建一个临时对象。

3、创建一个该类的全局对象

仅举一例

#include 《iostream》#include 《cassert》using namespace std;class A{public: void foo() {     cout 《《 "Yes" 《《 endl; } static void boo() {   static A oneObj;   oneObj.foo(); }};int main(){ A::boo(); A::boo(); return 0;}

在c++中,类的静态成员函数可以通过类的指针访问类的非静态数据成员吗

可以的,不过要间接访问。看下面的例子

#include 《iostream》using std::cout;using std::endl;class A{ int data; public: A(int i):data(i) {  cout《《"new"《《endl;  };  A():data(0)  {   cout《《"new A"《《endl;  };   A(const A& a){   data=a.data;   cout《《"new A copy"《《endl;  };   ~A()  {   cout《《"delete"《《endl;  };  static void access(A*a)//静态成员,参数为对象指针  {   a-》data++;   cout《《a-》data《《endl;//通过指针访问内部非静态对象;但不能用this指针直接来访问  } };  int main() {     A b(2);     b.access(&b);//静态成员函数访问     return 0; }

c++静态成员函数里,为何不能直接使用this指针

静态成员函数并不是针对某个类的实例对象,而是属于整个类的,为所有的对象实例所共有。他在作用域的范围内是全局的,独立于类的对象之外的。他只对类内部的静态成员变量做操作。当实例化一个类的对象时候,里面不存在静态成员的。this指针是相当于一个类的实例的指针,this是用来操作对象实例的内容的,既然静态成员函数和变量都是独立于类的实例对象之外的,他就不能用this指针。也不能操作非静态成员。再有你要想想设计静态成员的用意在哪里,就会更加明了了

c++静态成员函数里 为何不能使用成员变量this指针

static 成员,是在类的实力没有创建前就存在的。其他的成员必须是在类的实例创建才存在。例如:class A { public: static int a; static void func() {//静态函数在类的实例创建之前就存在的, 在实例创建之前,根本没有为b开辟空间 printf("%d", b);// 这个是错误的,因为类的实例还没有创建,不存在b } int b;};int A::a = 5;int main(){ printf("%d\n", A::a);// 这个是可以的,这个时候this指针是没有指向任何实例的,可以认为是NULL,另外this是私有的指针,不可能在外部使用的。 A m;//创建了一个类的实例, 这个时候b才被分配空间,才有一个this指针指向它。 printf("%d\n", m.b); return 0;}

静态成员函数没有this指针,是怎么实现被对象访问的的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于静态成员函数没有this指针,是怎么实现被对象访问的、静态成员函数没有this指针,是怎么实现被对象访问的的信息别忘了在本站进行查找哦。