静态方法 与 静态成员变量
1.如何访问静态成员变量
- 1.1 通过非静态成员函数调用
- 1.2 通过静态成员函数调用
- 1.3 通过类名调用
2.静态方法可以直接调用非静态变量嘛?不可以,但是通过参数传递的方式访问非静态数据成员
非静态变量属于对象,静态成员变量为所有对象共享,在程序编译时分配空间,而在程序结束时释放空间,与对象生命周期无关
静态方法可通过类名调用,此时可能类并未实例化 或者说 this pointer 为空指针,拿不到静态成员变量。
3.非静态方法可以调用静态变量嘛? 可以
source code :
点击查看代码
#include <iostream>
#include<stdio.h>
#include<memory>
using namespace std;
class Example {
public:
Example() {
_val1 = 1;
}
void Print() {
cout << "val2 = " << _val2 << endl;
// 非静态成员函数可以调用静态成员变量
cout << "val1 = " << _val1 << endl;
}
static void OutPut() {
cout << "val2 = " << _val2 << endl;
// 静态成员函数不可以调用非静态成员变量
// cout << "val1 = " << _val1 << endl;
}
static void OutPut2(const Example& e) {
cout << "val2 = " << e._val2 << endl;
// 访问非静态数据成员必须通过参数传递的方式
cout << "val1 = " << e._val1 << endl;
}
private:
int _val1;
public:
static int _val2;
};
int Example::_val2 = 2;
int main () {
// test
Example e;
// 通过非静态成员函数调用
e.Print();
// 通过静态成员函数调用
e.OutPut(); // 不建议使用object调用静态方法
Example:: OutPut();
Example:: OutPut2(e);
// 通过类名调用
cout << "Example::_val2 = " << Example::_val2 << endl;
return 0;
}