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

C++ static静态

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

相关文章:

  • 道路积水检测数据集 1450张 路面积水 带分割 voc yolo
  • 清华大模型公开课第二季 | Lecture 2 神经网络与大模型基础 Part 1
  • Java开发者测试:Junit5
  • 系统架构设计师论文《论企业集成平台的理解与应用》精选试读
  • [Algorithm][贪心][整数替换][俄罗斯套娃信封问题]详细讲解
  • Day44【最短路+欧拉回路】
  • HeidiSQL 数据库密码如何恢复
  • 告别@Value,Spring Boot 3.3更优雅的配置注入方案
  • linux自动挂载tf卡
  • Spring系列 Bean创建过程
  • Kubernetes 深度探索:StatefulSet 之有状态应用实战
  • React Route v6. 如何防止用户导航到另一个页面
  • 数据结构-4.6.KMP算法(旧版下)-朴素模式匹配算法的优化
  • aws(学习笔记第四课) AWS的IAM服务,用于授权的策略,用户和组以及角色
  • docker compose入门5—创建一个3副本的应用
  • ◇【论文_20181020 v6】广义优势估计器 (generalized advantage estimator, GAE)
  • PicGo 配置 GitHub 作为后端存储,打造免费的图床工具
  • 知识改变命运 数据结构【java对象的比较】
  • Kubernetes 深度洞察:StatefulSet 之存储状态探秘
  • 多模态方法总结