static修饰符

static可以修饰成员变量和成员函数

1.static可以修饰成员,用来在族内共享数据

#include <iostream>
using namespace std;

class Student
{
public:
    Student(){};
    ~Student(){};
public:
    void getCoin()
    {
        cout << coin << endl;
    }
public:
    static int coin; //硬币数 static相当于类的全局变量,其他是无法访问的

};

int Student::coin = 0; //static修饰的成员变量需在类外初始化

int main(int argc, char const *argv[])
{
    //1. 通过类直接访问
    cout<< Student::coin<<endl; //0

    //2. 通过类对象访问
    Student s;
    cout<< s.coin<<endl; //0
    return 0;
}

2.static修饰成员函数,只能访问静态成员

#include <iostream>
using namespace std;

class Student
{
public:
    Student(){};
    ~Student(){};
public:
    void getCoin(){
        cout<<coin<<endl; //普通函数访问静态成员是没有任何问题的
    }
public:
    static int coin;

};

int main(int argc, char const *argv[])
{

    return 0;
}
#include <iostream>
using namespace std;

class Student
{
public:
    Student(){};
    ~Student(){};
public:
    static void getCoin(){
        // cout<<coin<<endl; //这里访问coin会报错,静态函数只能访问静态成员
    }
public:
  int coin;    
};

int main(int argc, char const *argv[])
{

    return 0;
}

3.static+const组合

只能就地初始化

#include <iostream>
using namespace std;

class Student
{
public:
    Student(){};
    ~Student(){};
public:
    void getCoin(){
        cout<<coin<<endl;
    }
    void getCoin2(){
        cout<<coin2<<endl;
    }

public:
 static int coin;    
 static const int coin2 = 100; //static const只能就地初始化,别的地方初始化会报错
};

int Student::coin = 10;


int main(int argc, char const *argv[])
{
    Student s;
    s.getCoin(); //10
    s.getCoin2(); //100
    return 0;
}

results matching ""

    No results matching ""