C++初阶语法——static类成员

news2025/1/11 23:49:36

前言:本文将介绍类和对象中的static类成员——静态成员函数,静态成员变量的使用方法和注意点。在某些场景下,静态成员很有意义。

目录

  • 一.概念
  • 二.特性
    • 静态成员不存在对象中
  • 三.静态成员变量在类外初始化
  • 四.静态成员函数

一.概念

声明为static的类成员被称为类的静态成员,static修饰的成员变量称为静态成员变量,static修饰的成员函数称为静态成员函数。

二.特性

1.静态成员为所有类对象共享的,不属于某个具体的对象,存放在静态区
2.类静态成员即可用类名::静态成员或者对象.静态成员来访问。
3.静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明。
4.静态成员函数没有隐藏的this指针,不能访问非静态成员
5.静态成员也受public,private,protect访问限定符的限制。

静态成员不存在对象中

静态成员和成员函数一样,都是不存在对象中的。

用以下代码举例:

class A {
private:
	static int _a; //静态成员变量
};
int A::_a = 1; // 在类外定义初始化,用类名访问。
int main()
{
	cout << sizeof(A) << endl;
	return 0;
}

控制台输出:
在这里插入图片描述

我们知道,类的内存计算是遵循结构体对齐规则的,如果静态成员在对象中的话,输出结果应该为4,而现在输出结果为1(1为占位),则说明静态成员不存在对象中,它存在于静态区。

三.静态成员变量在类外初始化

这是重点,一定要记住。

class A {
private:
	static int _a; //静态成员变量声明
	//static int _a = 1 行不行???
};
int A::_a = 1; // 在类外初始化

在上面代码中博主给了个问题,声明静态成员函数时给个缺省值行不行?答案是不行的,因为声明处给缺省值实际上就是构造函数的初始化列表赋值,但是静态成员不属于某个具体的对象,也就是说静态成员函数不走初始化列表,故给个缺省值是无用的。

四.静态成员函数

跟常规成员函数不同,静态成员函数没有this指针。
静态成员函数不能访问非静态成员对象(因为没有this指针)。
静态成员对象和静态成员函数搭配使用。

class A {
public:
	/*void print() // _a是静态成员变量,常规成员函数不能访问静态成员对象
	{
		cout << _a << endl;
	}*/
	static void print() //需要写成静态成员函数才行
	{
		cout << _a << endl;
	}
	
private:
	static int _a; //静态成员变量
};
int A::_a = 1; // 在类外初始化
int main()
{
	A::print(); //类名::访问函数
	return 0;
}

文末BB:对哪里有问题的朋友,尽管在评论区留言,若哪里写的有问题,也欢迎朋友们在评论区指出,博主看到后会第一时间确定修改。最后,制作不易,如果对朋友们有帮助的话,希望能给博主点点赞和关注.
在这里插入图片描述

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

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

相关文章

RDMA qp数量和RDMA性能

QP数量上升性能下降 ​​​​​​https://icnp21.cs.ucr.edu/papers/icnp21camera-paper30.pdf 在现代云数据中心中&#xff0c;大规模分布式应用通常构建在许多机器上&#xff0c;需要使用大量并发连接进行频繁的网络通信[4]–[6]。但是&#xff0c;RDMA的性能会随着连接数的…

SpringBoot第42讲:SpringBoot集成Redis - 基于RedisTemplate+Lettuce数据操作

SpringBoot第42讲&#xff1a;SpringBoot集成Redis - 基于RedisTemplateLettuce数据操作 在SpringBoot 2.x版本中Redis默认客户端是Lettuce&#xff0c;本文是SpringBoot第42讲&#xff0c;主要介绍SpringBoot 和默认的 Lettuce 的整合案例。 文章目录 SpringBoot第42讲&#x…

通过案例学习pandas计算相关系数

pandas计算相关系数 在数据分析和统计学中&#xff0c;相关系数是一种用于衡量两个变量之间关系强度的统计指标。它可以帮助我们了解两个变量之间的线性关系强度和方向。 Pandas是一个强大的Python库&#xff0c;提供了许多用于数据分析和处理的功能。在本文中&#xff0c;我…

「新整理」战略定位理论发展史

1954年&#xff0c;彼得德鲁克——现代管理学之父 代表作《管理的实践》 提出具有划时代意义的概念——目标管理&#xff0c;将管理划分为战略管理、组织管理和自我管理。将生产力从生产部门扩大到组织的所有职能部门&#xff0c;以知识精英为代表的职业经理人开始代替资本家走…

基于ssm的CRM客户管理系统(spring + springMVC + mybatis)营销业务信息java jsp源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于ssm的CRM客户管理系统&#xff08;spring spring…

java-JVM 类加载机制

JVM 类加载机制 JVM 类加载机制分为五个部分&#xff1a;加载&#xff0c;验证&#xff0c;准备&#xff0c;解析&#xff0c;初始化&#xff0c;下面我们就分别来看一下这五个过程。 1.1. 加载 加载是类加载过程中的一个阶段&#xff0c;这个阶段会在内存中生成一个代表这…

浏览器控制台调试实用方法

许多程序员仅知道控制台的console.log&#xff0c;其实控制台API还包含一些其他实用方法&#xff0c; 这些方法在前端调试时会很有帮助。 目录 console.dir 查看对象属性和方法 输出DOM元素 console.error console.time和console.timeEnd console.log console.clear 总结…

13---内嵌HTML和React

虽然Markdown本身不支持内嵌HTML和React&#xff0c;但可以在Markdown文档中直接插入HTML代码和React组件。 一、在markdown中内嵌HTML 在Markdown中&#xff0c;你可以使用HTML标签来实现更复杂的样式和布局。例如&#xff0c;你可以使用<div>标签来创建一个容器&#…

【Axure模板】APP帮助中心原型,在线客服意见反馈模块高保真原型

作品概况 页面数量&#xff1a;共 10 页 兼容软件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 应用领域&#xff1a;原型设计模板 作品申明&#xff1a;页面内容仅用于功能演示&#xff0c;无实际功能 作品特色 该模板作品为APP帮助与客服的通用模块&#xff0c;…

Kepware 读取16位或32位数据时,结果不是真实数据的问题解决

kepware采集PLC的数据“IW260” IW260的值为61696&#xff0c;与PLC中显示的数值不一致。 61696二进制表示“11110001 00000000”,低8位“00000000”变为十进制为0&#xff1b;高8位“11110001”变为十进制为241&#xff0c;而241是IW260在PLC中显示的数值。由此可看出&#x…

【C语言】字符串函数介绍三(strstr、strtok、streeror)

前言 之前我们用两篇文章介绍了strlen、strcpy、stract、strcmp、strncpy、strncat、strncmp这些函数 第一篇文章strlen、strcpy、stract 第二篇文章strcmp、strncpy、strncat、strncmp 今天我们就来学习&#xff1a; 话不多说&#xff0c;我们直接开始 strstr 返回值 …

护航顶级赛事 | 以赛事空间信息服务助力大运会有序运行

8月8日&#xff0c;第31届世界大学生夏季运动会在成都圆满闭幕。此前&#xff0c;赛事组委会与相关部门着力建设“综合运行管理中心系统(后简称“MOC”系统)”&#xff0c;利用信息化手段&#xff0c;实现了对赛前、赛中、赛后各个阶段、各个对象、各个服务的信息化监管&#x…

用讯飞星火认知大模型构建一个带界面的聊天机器人

在本篇博客中&#xff0c;我们将使用 最新的星火认知大模型和 Tkinter 构建一个简单的聊天机器人界面。通过这个界面&#xff0c;用户可以与聊天机器人进行交互&#xff0c;并查看机器人的回答。 C:\pythoncode\blog\static_16919367030710594_SparkApi_Python\testui.py 准备…

Kubernetes二进制部署方案

目录 一、环境准备 2.1、主机配置 2.2、安装 Docker 2.3、生成通信加密证书 2.3.1、生成 CA 证书&#xff08;所有主机操作&#xff09; 2.3.2、生成 Server 证书&#xff08;所有主机&#xff09; 2.3.3、生成 admin 证书(所有主机) 2.3.4、生成 proxy 证书 三、部署 …

Java多态详解(1)

多态 多态的概念 所谓多态&#xff0c;通俗地讲&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的状态。 比如&#xff1a; 这一时间爆火的“现代纪录片”中&#xff0c;麦克阿瑟总是对各种“名人”有不同的评价&…

Linux常用命令——dircolors命令

在线Linux命令查询工具 dircolors 置ls命令在显示目录或文件时所用的色彩 补充说明 dircolors命令设置ls命令在显示目录或文件时所用的色彩。dircolors可根据[色彩配置文件]来设置LS_COLORS环境变量或是显示设置LS_COLORS环境变量的命令。 语法 dircolors(选项)(参数)选项…

如何区分闰年与平年

首先要明白 地球绕太阳运行周期为365天5小时48分46秒&#xff08;合365.24219天&#xff09;&#xff0c;即一回归年&#xff08;tropical year&#xff09;。公历的平年只有365日&#xff0c;比回归年短约0.2422 日&#xff0c;每四年累积约一天&#xff0c;把这一天加于2月末…

指令:指令执行过程、指令寻址、指令组成、数据寻址、补充(扩展操作码指令格式)

计算机的工作过程是执行程序的过程&#xff0c;程序是一系列按一定顺序执行的指令。 指令是指挥机器执行某种操作的命令&#xff0c;是计算机运行的最小功能单元&#xff08;一组二进制代码&#xff09;。 指令系统&#xff1a;计算机中所有指令的集合&#xff0c;也称指令集…

idea安装插件JRebel

一、安装插件 二、下载代理服务并启动 首先下载服务&#xff0c;网址 Releases ilanyu/ReverseProxy (kgithub.com) 下载后直接双击运行&#xff0c;杀毒软件可以会报警告&#xff0c;直接忽略就行 启动好&#xff0c;等着就行&#xff0c;接下来会用到。 三、在线获取GUID …

通讯协议044——全网独有的OPC HDA知识一之聚合(十二)持续坏值时间

本文简单介绍OPC HDA规范的基本概念&#xff0c;更多通信资源请登录网信智汇(wangxinzhihui.com)。 本节旨在详细说明HDA聚合的要求和性能。其目的是使HDA聚合标准化&#xff0c;以便HDA客户端能够可靠地预测聚合计算的结果并理解其含义。如果用户需要聚合中的自定义功能&…