C++ static静态

news/2024/10/9 8:25:54/

 个人主页: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.ppmy.cn/news/1536547.html

相关文章

智能听诊器:守护宠物健康的新助手

在宠物的世界里&#xff0c;健康是它们幸福生活的基石。随着科技的发展&#xff0c;宠物健康管理也迎来了新的时代。智能听诊器&#xff0c;作为宠物健康管理的新伙伴&#xff0c;正逐渐成为宠物主人的得力助手。 实时监测&#xff0c;健康预警 智能听诊器的核心功能是实时监…

Hierarchical Cross-Modal Agent for Robotics Vision-and-Language Navigation

题目&#xff1a;用于视觉语言导航的层次化跨模态智能体 摘要 1. 问题背景和现有方法 VLN任务&#xff1a;这是一种复杂的任务&#xff0c;要求智能体基于视觉输入和自然语言指令进行导航。 现有方法的局限性&#xff1a;之前的工作大多将这个问题表示为离散的导航图&#x…

玄机:第五章 linux实战-黑链

简介 服务器场景操作系统 Linux 服务器账号密码 root xjty110pora 端口 2222 用 finalshell 连接 1. 找到黑链添加在哪个文件 flag 格式 flag{xxx.xxx} 查找文件中包含“黑链”的内容&#xff1b; grep -rnw /var/www/html/ -e 黑链-r&#xff1a;递归搜索。这个选项告诉 gre…

Windows平台如何实现RTSP|RTMP流录像?

好多开发者使用场景&#xff0c;除了实现基础的低延迟RTSP、RTMP播放外&#xff0c;还需要实现RTSP、RTMP流数据的本地录像功能。本文以大牛直播SDK的Windows平台播放模块为例&#xff0c;介绍下如何实现RTSP、RTMP流录像。 功能设计 [拉流]支持拉取RTSP流录像&#xff1b; [拉…

数据提取之JSON与JsonPATH

第一章 json 一、json简介 json简单说就是javascript中的对象和数组&#xff0c;所以这两种结构就是对象和数组两种结构&#xff0c;通过这两种结构可以表示各种复杂的结构 > 1. 对象&#xff1a;对象在js中表示为{ }括起来的内容&#xff0c;数据结构为 { key&#xff1…

PHP cURL 教程

PHP cURL 教程 介绍 PHP cURL 是一个强大的库,用于在 PHP 中发送 HTTP 请求。它支持多种协议,包括 HTTP、HTTPS、FTP 等。在本教程中,我们将学习如何使用 PHP cURL 发送 GET 和 POST 请求,以及如何处理响应。 安装 PHP cURL 库通常随 PHP 安装包一起提供。要检查您的系…

【力扣算法题】每天一道,健康生活

2024年10月8日 参考github网站&#xff1a;代码随想录 1.二分查找 leetcode 视频 class Solution { public:int search(vector<int>& nums, int target) {int left 0;int right nums.size()-1;while(left<right){int middle (leftright)/2;if(nums[middle] …

API接口开发系列文章:构建高效、安全与可扩展的API服务

前言 在当今的数字化时代&#xff0c;API&#xff08;应用程序编程接口&#xff09;已成为连接不同系统、服务和应用的核心桥梁。无论是企业内部的数据交互&#xff0c;还是面向第三方的服务开放&#xff0c;API都扮演着至关重要的角色。本系列文章将深入探讨API接口开发的各个…