• 【C++】静态成员变量 ( 静态成员变量概念 | 静态成员变量声明 | 静态成员变量初始化 | 静态成员变量访问 | 静态成员变量生命周期 )






    一、静态成员变量概念




    1、静态成员变量引入


    在 C++ 类中 , 静态成员变量 又称为 静态属性 ;

    静态成员归属 : 静态成员变量 是特殊的成员变量 , 是 类所有的 成员 , 而不是对象所有的成员 ;

    静态成员变量 提供了 同类对象的共享机制 : 同一个类的 所有实例对象 , 都可以共享访问 想通的 静态成员变量实例 ;


    2、静态成员变量声明


    静态成员变量 声明 方式 :

    • 使用 static 关键字 修饰 类的 成员变量 , 那么 该成员变量 就被声明为 " 静态成员变量 " ;

    • 将 类的成员 声明为 static , 那么该类 不论 创建了多少个 实例对象 , 这些对象都会共享 该 static " 静态成员变量 " ;

    • 静态成员变量 声明 : 静态成员变量 是在 类定义时 , 在类的内部 进行 声明 ;

    class Student
    {
    public:
    	// 带参构造函数
    	Student(int age, int height)
    	{
    		m_age = age;
    		m_height = height;
    		cout << "执行 Student 的构造函数" << endl;
    	}
    
    	~Student()
    	{
    		cout << "执行 Student 的析构函数" << endl;
    	}
    
    public:
    	int m_age;		// 年龄
    	int m_height;	// 身高
    
    	// 在类内部定义静态成员
    	static int number;
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    3、静态成员变量初始化


    静态成员变量 初始化 : 静态成员变量 是在 类使用时 , 在类的外部 进行 初始化 ;


    Student 类的 静态成员 成员变量 初始化有两种方式 :

    • 声明 并 进行初始化 : 声明类内部已经定义的 静态成员变量 , 然后进行初始化 ;
    // 在类外部初始化静态成员变量  
    int Student::number = 1;
    
    • 1
    • 2
    • 只进行初始化 : 只对 类内部已定义的 静态成员变量 进行单纯的赋值 ;
    // 在函数中为 类 静态成员变量 赋值
    Student::number = 2;
    
    • 1
    • 2

    4、静态成员变量访问


    静态成员变量访问 :

    • 使用域操作符访问 : 格式为 类名::静态成员变量名 ;
    	// 使用 域操作符 访问 类静态成员变量
    	// 类名::静态成员变量名
    	cout << "Student::number = " << Student::number << endl;
    
    • 1
    • 2
    • 3
    • 使用类对象访问 : 格式为 对象名称.静态成员变量名
    	// 使用 对象 访问 类静态成员变量
    	// 对象名称.静态成员变量名
    	cout << "s.number = " << s.number << endl;
    
    • 1
    • 2
    • 3

    5、静态成员变量生命周期


    静态成员变量 的 生命周期 就是 程序的声明周期 ;

    静态成员变量 在 应用启动时 初始化 , 在 进程结束时销毁 ;

    静态成员变量在多个对象之间共享 , 在 程序生命周期 之内 , 类的多个对象的 静态成员的值 是相同的 ;





    二、完整代码示例



    下面的代码中 :

    定义了 Student 类 , 其中定义了 静态成员变量 number ;

    	// 在类内部定义静态成员
    	static int number;
    
    • 1
    • 2

    声明 静态成员变量 并进行初始化的代码为 int Student::number = 1;

    // 在类外部声明并初始化静态成员变量  
    int Student::number = 1;
    
    • 1
    • 2

    单独进行 静态成员变量 初始化 , 代码为 Student::number = 2 ;

    	// 在函数中为 类 静态成员变量 赋值
    	Student::number = 2;
    
    • 1
    • 2

    成员变量访问有两种方式 :

    • 使用 域操作符 访问 类静态成员变量 : 类名::静态成员变量名 ;
    	// 使用 域操作符 访问 类静态成员变量
    	// 类名::静态成员变量名
    	cout << "Student::number = " << Student::number << endl;
    
    • 1
    • 2
    • 3
    • 使用 对象 访问 类静态成员变量 : 对象名称.静态成员变量名 ;
    	// 使用 对象 访问 类静态成员变量
    	// 对象名称.静态成员变量名
    	cout << "s.number = " << s.number << endl;
    
    • 1
    • 2
    • 3

    代码示例 :

    #include "iostream"
    using namespace std;
    
    class Student
    {
    public:
    	// 带参构造函数
    	Student(int age, int height)
    	{
    		m_age = age;
    		m_height = height;
    		cout << "执行 Student 的构造函数" << endl;
    	}
    
    	~Student()
    	{
    		cout << "执行 Student 的析构函数" << endl;
    	}
    
    public:
    	int m_age;		// 年龄
    	int m_height;	// 身高
    
    	// 在类内部定义静态成员
    	static int number;
    };
    
    // 在类外部初始化静态成员变量  
    int Student::number = 1;
    
    int main() {
    	// 使用 域操作符 访问 类静态成员变量
    	// 类名::静态成员变量名
    	cout << "Student::number = " << Student::number << endl;
    
    	// 在函数中为 类 静态成员变量 赋值
    	Student::number = 2;
    
    	// 创建 Student 类型对象
    	Student s(10, 150);
    
    	// 使用 对象 访问 类静态成员变量
    	// 对象名称.静态成员变量名
    	cout << "s.number = " << s.number << endl;
    
        // 控制台暂停 , 按任意键继续向后执行
        system("pause");
    
        return 0;
    }
    
    • 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
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    执行结果 :

    Student::number = 1
    执行 Student 的构造函数
    s.number = 2
    请按任意键继续. . .
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

  • 相关阅读:
    10 个高频 Python 面试题
    算法与设计分析--实验一
    Bloc入门之Bloc详解
    边缘计算技术的崭新篇章:赋能未来智能系统
    头条百科是什么?创建头条百科效果怎么样?
    Netty入门——概述
    个性化推送通知的3种方法,提升60% ROI
    cpp中的函数重载
    解决/usr/bin/env: ‘python3\r’: No such file or directory
    用于可穿戴传感器的人类活动识别、健康监测和行为建模的大型语言模型
  • 原文地址:https://blog.csdn.net/han1202012/article/details/133179810