静态成员

静态成员

  • 静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员。

  • 静态成员变量

    (1)所有对象共享一段内存

    (2)在编译阶段分配内存

    (3)类内声明,类外初始化

    示例:

    1
    2
    3
    4
    5
    class A{
    public:
    static int a;
    }
    int A::a = 100;

    ​ (4)访问方式:通过类名或者对象进行访问,私有静态成员类外不可访问

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #include<iostream>
    using namespace std;
    class Person {
    public:
    static int m_A;
    private:
    static int m_B;//静态成员变量访问权限,类外不可访问
    };
    //类外初始化
    int Person::m_A = 100;
    int Person::m_B = 100;
    void test01() {
    Person p;
    cout << p.m_A << endl;
    Person p1;
    p1.m_A = 200;
    cout << p.m_A << endl;
    }
    //访问方式
    void test01() {
    //1、通过对象进行访问
    Person p;
    cout << p.m_A << endl;
    //2、通过类名进行访问
    cout << Person::m_A << endl;
    //cout << Person::m_B << endl;//类外不可访问私有静态变量
    }
    int main() {
    test01();
    return 0;
    }
  • 静态成员函数

    (1)所有对象共享同一个函数

    (2)静态成员函数只能访问静态成员变量

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include<iostream>
    using namespace std;
    class Person {
    public:
    static int m_A;
    //静态成员变量访问权限
    static void func() {
    m_A = 50;
    //m_B = 100;//报错,静态成员函数不可以访问非静态成员变量
    cout << "static void func()的调用。" << endl;
    }
    private:
    int m_B;
    static void func1() {
    cout << "static void func1()的调用。" << endl;
    }
    };
    //类外初始化
    int Person::m_A = 100;

    //访问方式
    void test01() {
    //1、通过对象进行访问
    Person p;
    p.func();
    //p.func1();//不可再类外访问私有静态成员函数
    //2、通过类名进行访问
    Person::m_A;
    }
    int main() {
    test01();
    return 0;
    }