静态方法 与 静态成员变量

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;
}
posted @ 2022-06-16 11:22  locker_10086  阅读(103)  评论(0编辑  收藏  举报