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

news2024/10/6 10:38:14

文章目录

  • 一、静态成员变量概念
    • 1、静态成员变量引入
    • 2、静态成员变量声明
    • 3、静态成员变量初始化
    • 4、静态成员变量访问
    • 5、静态成员变量生命周期
  • 二、完整代码示例





一、静态成员变量概念




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;
};

3、静态成员变量初始化


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


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

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

4、静态成员变量访问


静态成员变量访问 :

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

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


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

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

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





二、完整代码示例



下面的代码中 :

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

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

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

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

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

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

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

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

代码示例 :

#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;
}

执行结果 :

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1032578.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一百八十二、大数据离线数仓——离线数仓从Kafka采集、最终把结果数据同步到ClickHouse的完整数仓流程(待续)

一、目的 经过6个月的奋斗&#xff0c;项目的离线数仓部分终于可以上线了&#xff0c;因此整理一下离线数仓的整个流程&#xff0c;既是大家提供一个案例经验&#xff0c;也是对自己近半年的工作进行一个总结。 二、项目背景 项目行业属于交通行业&#xff0c;因此数据具有很…

please choose a certificate and try again.(-5)报错怎么解决

the server you want to connect to requests identification,please choose a certificate and try again.(-5)

英语——分享篇——每日100词——301-400

straight——str街道(熟词street)aight八(形似eight)——街道上的八条路是笔直的 valley——v维生素(编码)all所有(熟词)ey鳄鱼(拼音)——维生素被所有的鳄鱼在山谷里吃掉了 deer——d狗(编码)ee眼睛(象形)r小草(编码)——狗眼睛看着小草变成一只鹿 goose——goo900(象形)se色(…

git:二、git的本地配置+工作区域和文件状态+git add/commit/log +git reset回退版本

git的使用方式 命令行&#xff08;最常用&#xff09;图形化界面IDE插件/拓展&#xff08;次常用&#xff09; git的本地/系统配置 之前的文章提到过git的全局配置。如下&#xff1a; git config --global user.name "ss" git config --global user.email "…

[杂谈]-八进制数

八进制数 文章目录 八进制数1、概述2、八进制数的表示2.1 八进制数2.2 以八进制计数2.3 二进制数补零 3、八进制到十进制转换4、十进制到八进制转换5、二进制到八进制转换示例6、八进制到二进制和十进制转换示例7、总结 1、概述 八进制编号系统是另一种使用基数为8计数系统&am…

医疗革命的关键推手,看AIGC弥合医疗差距的未来之路

随着科技的飞速进步&#xff0c;医疗水平在过去几十年里取得了巨大的突破。这些科技创新不仅改变了我们对健康和医疗的认知&#xff0c;也深刻地塑造了社会的现状。其中&#xff0c;人工智能作为医疗领域的一项前沿技术&#xff0c;正以前所未有的方式影响着我们的生活。它不仅…

CUDA和cuDNN的安装

参考资料&#xff1a;https://zhuanlan.zhihu.com/p/83971195 目录 CUDA和cuDNN介绍安装验证 CUDA和cuDNN介绍 CUDA(ComputeUnified Device Architecture)&#xff0c;是显卡厂商NVIDIA推出的运算平台。 CUDA是一种由NVIDIA推出的通用并行计算架构&#xff0c;该架构使GPU能够…

python-docx办公自动化批量生成离职证明

关注公众号&#xff1a;Python Lab 首先&#xff0c;在网络找到这样一份模板内容&#xff0c;可以根据这么模板进行排版 这是存放在Excel中的数据&#xff0c;根据数据遍历其中的内容&#xff0c;写入word当中 完整代码实现 from docx import Document import pandas as pd …

sqlmap tamper脚本编写

文章目录 tamper脚本是什么&#xff1f;指定tamper脚本运行sqlmap安全狗绕过tamper脚本 tamper脚本是什么&#xff1f; SQLMap 是一款SQL注入神器&#xff0c;可以通过tamper 对注入payload 进行编码和变形&#xff0c;以达到绕过某些限制的目的。但是有些时候&#xff0c;SQLM…

SLAM从入门到精通(参数处理)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在编写ros程序的过程中&#xff0c;很多时候需要不停修改程序的参数。比如说&#xff0c;我们有一个配置文件。在程序还没有运行之前&#xff0c;我…

实至名归!优维科技荣膺NIISA联盟2022年度双项技术创新奖

日前&#xff0c;国家互联网数据中心产业技术创新战略联盟&#xff08;以下简称&#xff1a;NIISA联盟&#xff09;2022年度技术创新奖评选结果公布&#xff01;经过激烈角逐&#xff0c;优维科技脱颖而出&#xff0c;荣膺双项大奖&#xff01; “EasyCore—CMDB超融合数据库”…

移植FreeRTOS的STM32F103双轮平衡小车(开源,代码文末)

耗时大概三四天吧&#xff0c;主要时间还是花在硬件方面上&#xff0c; ps&#xff1a;之前因为还想再完善一点&#xff0c;就一直放在草稿里&#xff0c;并不是今天才写的。面试官看到希望理解。。。 引言 1、系统概述 1.1、设计任务 利用stm32f103作为主控&#xff0c;移…

JavaSE List

目录 1 预备知识-泛型(Generic)1.1 泛型的引入1.2 泛型类的定义的简单演示 1.3 泛型背后作用时期和背后的简单原理1.4 泛型类的使用1.5 泛型总结 2 预备知识-包装类&#xff08;Wrapper Class&#xff09;2.1 基本数据类型和包装类直接的对应关系2.2 包装类的使用&#xff0c;装…

【C++面向对象侯捷下】2.转换函数 | 3.non-explicit-one-argument ctor

文章目录 operator double() const {} 歧义了 标准库的转换函数

美创科技参编《数字政府建设与发展研究报告(2023)》 正式发布

9月14日&#xff0c;中国信息通信研究院云计算与大数据研究所牵头编制的《数字政府建设与发展研究报告&#xff08;2023&#xff09;》正式发布。 美创科技结合在政务数据安全领域的丰富实践经验&#xff0c;参与报告编写。 《数字政府建设与发展研究报告》 以“技术、业务、数…

2023工博会强势回归!智微工业携八大系列重磅亮相

中国国际工业博览会&#xff08;简称"中国工博会"&#xff09;自1999年创办以来&#xff0c;历经二十余年发展创新&#xff0c;通过专业化、市场化、国际化、品牌化运作&#xff0c;已发展成为通过国际展览业协会&#xff08;UFI&#xff09;认证、中国工业领域规模最…

flex布局与float布局

float布局 俩栏 三栏 flex布局

Leetcode199. 二叉树的右视图

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 题解&#xff1a;力扣&#xff08;LeetCode&#xff09…

大型集团借力泛微搭建语言汇率时区统一、业务协同的国际化OA系统

国际化、全球化集团&#xff0c;业务遍布全世界&#xff0c;下属公司众多&#xff0c;集团对管理方式和企业文化塑造有着很高的要求。不少大型集团以数字化方式助力全球统一办公&#xff0c;深化企业统一管理。 面对大型集团全球化的管理诉求&#xff0c;数字化办公系统作为集…

虚拟机部署linux网络连接配置

1、虚拟机安装linux后&#xff0c;配置网络访问 虚拟机网络设置为NAT模式 linux网络配置好IP&#xff0c;主要是以下网络配置 2、linux没有ifconfig命令&#xff0c;ifconfig命令是在net-tools.x86_64包里 yum install net-tools.x86_64安装