static成员函数访问非static成员
来源:互联网 发布:知乎性价比高的拉杆箱 编辑:程序博客网 时间:2024/06/05 19:31
在C++中类的static成员类似于作用于类的全局成员,可以在类未创建任何实例化时直接通过 类名::静态成员名 进行访问。
static成员函数只能访问static成员,而不能访问非static成员。这是因为在类为实例化时,静态成员已经存在,而非静态成员只有在实例化的时候才创建,如果在静态成员中访问非静态成员,很可能崩溃(访问一个不存在的对象)。因此,C++中禁止static成员函数直接访问非static成员。
那么,如果必须在static成员函数中访问非static成员怎么办呢?
如下:
class Test{public: static void fun(Test *pT){ cout<<pT->m_a<<endl; }private: int m_a; static int m_b;};int Test::m_b = 0;
通过添加一个指针参数即可。
需要注意的是,无论pT传入何值,编译都不会报错。
这个时候就需要调用者注意了,如果传入NULL程序运行是必然会崩溃,如下:
int main(){ Test *p =NULL; Test::fun(p); //编译不会报错,但运行时fun会崩溃 cout<<p->m_b<<endl; //能正常运行,因为static成员不依靠this。 return 0;}
0 0
- static成员函数访问非static成员
- C++中static成员函数访问非static成员变量
- C++中static成员函数访问非static成员变量
- 为什么static成员函数不能访问非static变量, 不能调用非static成员函数?
- static成员函数成员变量
- static成员和static成员函数
- static数据成员与static成员函数
- static成员和static成员函数
- Static成员变量,static成员函数解析
- static成员和static成员函数
- Static 静态成员函数 和 static成员的访问 【C++ static】
- static ---静态成员函数
- const/static 成员函数
- static 静态成员函数
- static成员函数
- static 静态成员函数
- const成员函数与static成员函数
- static成员
- 专业版V9.1SP1提示"运行时错误,-2147417848(80010108)
- WebSocket(3)-- WebSocket协议简介
- ACE 环境配置
- 手摘
- WebSocket(4)-- WebSocket与TCP、Http的关系
- static成员函数访问非static成员
- shell中其他值得关注的知识点
- hadoop集群搭建的无密登陆(密钥)---ssh(ssh-keygen -t rsa;scp ../id_rsa.pub >> ./authorized_keys)
- WebSocket(5)-- WebSocket Server
- 在导入eclipse项目到Android Studio出现这样的错误, 非法字符: ‘\ufeff‘ 解决方案|错误: 需要class, interface或enum
- 重识Javascript系列---ECMAScript变量
- Python运算符
- 设计模式C++学习笔记之一(Strategy策略模式)
- mysql监控