C++ static静态

news2024/10/9 8:08:10

 个人主页:Jason_from_China-CSDN博客

所属栏目:C++系统性学习_Jason_from_China的博客-CSDN博客

所属栏目:C++知识点的补充_Jason_from_China的博客-CSDN博客

概念概述

  • 用 static 修饰的成员变量,称之为静态成员变量,静态成员变量一定要在类里面生命,在类外进行初始化。
  • 静态成员变量为所有类对象所共享,不属于某个具体的对象,不存在对象中,存放在静态区。
  • 用 static 修饰的成员函数,称之为静态成员函数,静态成员函数没有 this 指针。
  • 静态成员函数中可以访问其他的静态成员,但是不能访问非静态的,因为没有 this 指针。
  • 非静态的成员函数,可以访问任意的静态成员变量和静态成员函数。
  • 突破类域就可以访问静态成员,可以通过类名::静态成员或者对象.静态成员来访问静态成员变量和静态成员函数。
  •  静态成员也是类的成员,受 public、protected、private 访问限定符的限制。
  • 静态成员变量不能在声明位置给缺省值初始化,因为缺省值是个构造函数初始化列表的,静态成员变量不属于某个对象,不走构造函数初始化列表。

static的使用1:

  • 静态成员函数的使用是很结合构造和析构的,静态成员函数是可以直接突破类域来访问静态成员函数
  • 不是静态成员函数就不能突破类域直接访问,我们需要创建一个对象,利用对象访问成员函数

  • 如果不设置静态成员函数,那么你需要访问成员变量,就需要创建一个对象才能访问成员函数,从而导致麻烦。所以我们可以直接设置为静态成员函数。

  • 这里有一个注意事项,就是不是静态成员变量,不能用静态成员函数访问,不然会导致报错

static的使用2:

这里我使用vs编译器,vs编译器不支持可边长数组,所以代码有点不一样

#include<iostream>
using namespace std;
//求1+2......+n//不能使用乘除
class sum
{
public:
	sum()
	{
		_ret += _i;
		++_i;
	}
	//获取ret最终的结果
	static int _GetRet()
	{
		return _ret;
	}
private:
	static int _i;
	static int _ret;
};
int sum::_i = 1;
int sum::_ret = 0;


class solution
{
public:
	int _solution(int n)
	{
		for (int i = 0; i < n; i++)
		{
			//创建n次构造函数,n次构造函数++会依次递加
			sum s;
		}
		//创建n次数之后,我们计算出来数值,此时我们可以选择数值来进行接收
		int ret = sum::_GetRet();
		//打印数值
		cout << ret << endl;

		//返回数值
		return sum::_GetRet();
	}
};

int main()
{
	solution s;
	int ret = s._solution(100);//这里接收进行验证,发现是正确的
	cout << ret << endl;//打印出来
	return 0;
}

sum

  1. 成员变量:

    • static int _i:静态成员变量,用于记录当前要累加的数字。初始化为 1。
    • static int _ret:静态成员变量,用于存储累加的结果。初始化为 0。
  2. 构造函数:

    • 每次创建 sum 类的对象时,构造函数被调用。在构造函数中,将当前的 _i 值累加到 _ret 中,然后将 _i 的值自增。这样,每次创建对象就相当于进行一次累加操作。
  3. 静态成员函数 _GetRet()

    • 用于获取 _ret 的值,即累加的结果。

solution

  1. 成员函数 _solution(int n)
    • 这个函数接受一个整数 n,目的是计算从 1 加到 n 的和。
    • 通过一个循环创建 n 次 sum 类的对象。每次创建对象时,sum 类的构造函数会自动进行累加操作。
    • 最后,通过 sum::_GetRet() 获取累加的结果,并将其赋值给 ret,然后打印和返回这个结果。

static的使用3:

构造函数:C是全局变量先进行构造,其次就是局部变量依次进行构造

析构函数:先析构局部变量,先构造的后析构,所以先析构B,其次是A,最后是D,全局变量生命周期伴随函数的结束

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

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

相关文章

车辆重识别(2021NIPS无分类器扩散指南)论文阅读2024/10/08

什么叫做有条件和无条件的扩散模型&#xff1f; FID是什么&#xff1f; IS是什么&#xff1f; λ是给出的参数&#xff0c;就像去噪扩散模型中每个时间步的β一样&#xff0c;每一时间步的λ都会给出。对于是否有条件信息c的概率 我的意思是在每一个训练轮次中&#xf…

一个适用于 ASP.NET Core 的轻量级插件框架

前言 今天大姚给大家分享一个适用于 ASP.NET Core 的轻量级插件框架&#xff0c;简单配置&#xff0c;开箱即用&#xff1a;PluginCore。 项目概述 PluginCore 是一个基于 ASP.NET Core 的轻量级插件框架&#xff0c;旨在简化插件的集成与管理。通过最少的配置&#xff0c;开…

wps文本框文字居中对齐

直接点对齐里的水平居中&#xff0c;垂直居中是将文本框水平垂直居中&#xff0c;文字不会居中 将文本框里的文字居中&#xff1a; 垂直居中&#xff1a; 水平居中&#xff1a;

基于SpringBoot的校园健康信息管理系统

第1章 绪论 1.1背景及意义 随着社会的快速发展&#xff0c;计算机的影响是全面且深入的。人们生活水平的不断提高&#xff0c;日常生活中人们对医院管理方面的要求也在不断提高&#xff0c;由于老龄化人数更是不断增加&#xff0c;使得师生健康信息管理系统的开发成为必需而且紧…

前端反接保护:实用方案解析与探讨

前端反接保护通常采用肖特基二极管方案或PMOS/NMOS方案&#xff0c;本文另外介绍一种理想二极管方案。 1、肖特基二极管方案 由于肖特基二极管具有正向导通电压&#xff0c;只能用于小电流场合&#xff0c;甚至于直接使用普通的整流二极管。比如1A电流&#xff0c;设D1的正向…

笔记整理—linux进程部分(9)互斥锁

互斥锁也叫互斥量&#xff0c;可以看作一种特殊的信号量。信号量可以>0&#xff0c;大家可以排队使用信号量&#xff0c;互斥锁只有0、1&#xff0c;主要实现关键段保护&#xff0c;只能在某一时间给某一任务去调用这段资源&#xff0c;这段内容用之前上锁&#xff0c;用完时…

Spring一共有几种注入方式?

目录 一、Spring Ioc 什么是 IOC&#xff1f; 依赖倒置原则 为什么叫控制反转&#xff1f; 两种实现方式 依赖注入DI Spring有哪些注入方式&#xff1f; 1. 构造方法注入 2. Setter方法注入 3. 字段/属性注入 4. 方法注入 5. 接口注入 6. 注解注入 二、Spring Ao…

gaussdb hccdp认证模拟题(多选)

1.以下哪些方式可以查询数据库信息&#xff1f; (1 分) A. \l B. \db C. select * from pg_database; D. select * from gs_database; --AC 2.以下哪些权限是开启三权分立后系统管理员不再具备的权限&#xff1f; (1 分) A. 用户管理权限 B. 表空间管理权限 C. …

通信工程学习:什么是三网融合

三网融合 三网融合&#xff0c;又称“三网合一”&#xff0c;是指电信网、广播电视网、互联网在高层业务应用上的深度融合。这一概念在近年来随着信息技术的快速发展而逐渐受到重视&#xff0c;并成为推动信息化社会建设的重要力量。以下是对三网融合的详细解释&#xff1a; 一…

20.数据结构与算法-树和二叉树/满二叉树/完全二叉树/二叉树的性质/二叉树的存储结构

树的定义 树的其它表示方法 树的基本术语 树结构和线性结构的比较 二叉树的定义 二叉树案例引入 二叉树的抽象数据类型定义 二叉树的性质 两种特殊形式的二叉树 满二叉树 完全二叉树 完全二叉树的性质 二叉树的存储结构 二叉树的顺序存储 二叉树的链式存储结构 二叉链表 三叉链…

GISBox工具:轻松实现倾斜摄影数据从OSGB到3D Tiles的转变

在现代地理信息系统&#xff08;GIS&#xff09;和三维可视化领域&#xff0c;倾斜摄影数据&#xff08;OSGB格式&#xff09;和3D Tiles格式是两种广泛应用的数据格式。然而&#xff0c;将OSGB数据转换为3D Tiles格式以便在Cesium等平台上加载和展示&#xff0c;一直是许多开发…

[控制理论]—差分变换法与双线性变换法的基本原理和代码实现

差分变换法与双线性变换法的基本原理和代码实现 1.差分变换法 差分变换法就是把微分方程中的导数用有限差分来近似等效&#xff0c;得到一个与原微分方程逼近的差分方程。 差分变换法包括后向差分与前向差分。 1.1 后向差分法 差分变换如下&#xff1a; d e ( t ) d t e…

Stable Diffusion绘画 | 签名、字体、Logo设计

第1步&#xff0c;使用 PS&#xff08;小白推荐使用 可画&#xff09;准备一个 512*768 的签名、字体、Logo图片&#xff1a; 第2步&#xff0c;来到模型网站&#xff0c;搜索&#x1f50d;关键词“电商”&#xff0c;找到一款喜欢的 LoRA&#xff1a; 第3步&#xff0c;选择一…

什么是fastText

1. 什么是fastText 英语单词通常有其内部结构和形成⽅式。例如&#xff0c;我们可以从“dog”“dogs”和“dogcatcher”的字⾯上推测它们的关系。这些词都有同⼀个词根“dog”&#xff0c;但使⽤不同的后缀来改变词的含义。而且&#xff0c;这个关联可以推⼴⾄其他词汇。 在wor…

初学者如何快速入门人工智能

一、引言 人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;&#xff0c;作为当今科技领域极具前景与影响力的方向之一&#xff0c;吸引着众多人士投身其中。无论是对科技充满好奇的学生&#xff0c;还是意图拓展职业发展路径的职场人士&#xff0c…

Linux的图形系统概述 (TODO)

&#xff08;TODO&#xff09; Linux graphics stack 现代 Linux 图形栈由多个子系统和层次组成&#xff0c;从应用程序到硬件之间的各个层面协同工作来处理图形显示和硬件加速。随着时间的推移&#xff0c;Linux 从传统的 **X Window System** 逐步过渡到 **Wayland**&#x…

filebrowser:轻松管理服务器文件,跨平台云端存储新选择

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 filebrowser是一款功能强大的文件管理器&#xff0c;用户可以通过浏览器对服务器上的文件进行修改、添加、删除甚至分享。其界面简洁&#xff0c;操作…

螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习07(基于docker容器的防火墙及NAT企业实战)

7.1 网络准备 7.2 网络规划 1&#xff09;虚拟网络编辑器 点击右下方“更改设置”&#xff0c;点击“添加网络”假如vmnet3和vmnet4&#xff0c;然后分别选择vmnet3和vmnet4&#xff0c;设置为“仅主机模式”&#xff0c;按③处处理&#xff0c;去掉“使用DHCP”&#xff0c;…

Unite Shanghai 2024 团结引擎专场 | 团结引擎 OpenHarmony 工程剖析

在 2024 年 7 月 24 日的 Unite Shanghai 2024 团结引擎专场演讲中&#xff0c;Unity中国 OpenHarmony 技术负责人刘伟贤对团结引擎导出的 OpenHarmony 工程进行了细节剖析&#xff0c;详细讲解 XComponent 如何与引擎结合&#xff0c;UI 线程和引擎线程的关联以及 ts/ets 的代…

瓷片区该如何设计?这里有几十个样式呀

瓷片区在设计中扮演着重要的角色&#xff0c;它可以快速吸引用户的注意力&#xff0c;引导用户进行进一步的探索。那么&#xff0c;瓷片区该如何设计呢&#xff1f;这里有几十个样式可供参考。