当前位置: 首页 > news >正文

c++基础(九)——静态成员

一、静态成员

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

静态成员分为:

静态成员变量:
(1)所有对象共享同一份数据:
作为静态成员变量,所储存的变量只有一份,当A对象改变这一数值之后,B对象读取这个数值时即为A对象更改之后的数值。

void test4()
{
	person p1;
	cout << "person的年龄是" << p1.m_age << endl;
	person p2;
	p2.m_age = 200;
	cout << "person的年龄是" << p1.m_age << endl;
}

此时输出为:

person的年龄是100
person的年龄是200

(2)在编译阶段分配内存:
代码没有运行之前就已经在全局区给这一成员变量分配了一块内存地址。
(3)类内声明,类外初始化

class person
{
public:
	//类内声明
	static int m_age;
};

//类外初始化,由于类外为一个全局变量,需要注明是peron这一作用域下的一个变量
int person::m_age = 100;

静态成员变量不属于某个对象上,所有对象都共享同一份数据。静态成员有如下两种访问形式:

void test5()
{
	//1、通过对象进行访问
	person p1;
	cout << "person的年龄是" << p1.m_age << endl;
	
	//2、通过类名进行访问
	cout << person::m_age << endl;

}

静态成员也是有访问权限的,当一个私有变量为静态变量时,只有类内可以访问该变量,类外是没有权限访问的。样例如下。此时会报错严重性E0265 成员 “person::m_Age” (已声明 所在行数:20) 不可访问。

class person
{

private:
	static int m_Age;
};
int person::m_Age = 100;
cout << person::m_Age << endl;

静态成员函数:
(1)、所有对象共享同一函数
静态成员函数不属于某个对象上,所有对象都共享同一份数据。静态函数有如下两种访问形式:

void test6()
{
	person p1;
	//通过对象访问
	p1.func();

	//通过类名访问
	person::func();

}

(2)、静态成员函数只能访问静态成员变量
非静态成员变量必须通过一个对象才能读和写本块内存,如果对其操作,则无法确定需要对哪个对象下的该变量进行操作。
又因为静态成员函数不属于某个对象上,所有对象都共享同一份数据,不区分所属关系。所以可以对其变量进行操作。

class person
{
public:

	//静态成员函数
	static void func()
	{
		m_a = 100;
		m_b = 200; //此行会报错:非静态成员引用必须与特定对象相对
		cout << "静态函数成员调用" << endl;
	}
	static int m_a;
	int m_b;
};
int person::m_a = 1;

同时,静态函数也是有访问权限的,当一个私有变函数为静态函数时,只有类内可以访问该函数,类外是没有权限访问。

相关文章:

  • Android中的Drawable(三)
  • Java面向对象(二)
  • 【spring】bean的生命周期
  • R语言ggplot2可视化:使用ggpubr包的ggline函数可视化分组折线图(点线图、line plot)、palette参数自定义不同分组折线图的颜色
  • Dubbo之注册与发现
  • R语言使用df函数生成F分布密度函数数据、使用plot函数可视化F分布密度函数数据(F Distribution)
  • Java--正则表达式
  • java计算机毕业设计家政服务管理源码+数据库+系统+lw文档+mybatis+运行部署
  • Java常量池理解
  • Dubbo入门介绍及学习笔记总结
  • 【SpringMVC】重定向和转向详解
  • ocr的场景应用--发票识别
  • Dubbo入门(四)Provider和Consumer的注解实现
  • dubbo分布式日志调用链追踪
  • 软件测试周刊(第87期):天下就没有偶然,那不过是化了妆的、戴了面具的必然。
  • 【css3】浏览器内核及其兼容性
  • 【个人向】《HTTP图解》阅后小结
  • Javascript基础之Array数组API
  • leetcode讲解--894. All Possible Full Binary Trees
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • SwizzleMethod 黑魔法
  • Swoft 源码剖析 - 代码自动更新机制
  • Vue2.0 实现互斥
  • 百度地图API标注+时间轴组件
  • 电商搜索引擎的架构设计和性能优化
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 如何在GitHub上创建个人博客
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 一道闭包题引发的思考
  •  一套莫尔斯电报听写、翻译系统
  • 用 Swift 编写面向协议的视图
  • 正则学习笔记
  • 中文输入法与React文本输入框的问题与解决方案
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • Spring第一个helloWorld
  • # 安徽锐锋科技IDMS系统简介
  • #etcd#安装时出错
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (11)MATLAB PCA+SVM 人脸识别
  • (30)数组元素和与数字和的绝对差
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (万字长文)Spring的核心知识尽揽其中
  • (学习日记)2024.02.29:UCOSIII第二节
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • .a文件和.so文件
  • .NET CF命令行调试器MDbg入门(一)
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .net 按比例显示图片的缩略图
  • .NET 指南:抽象化实现的基类
  • .net6+aspose.words导出word并转pdf