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

C++系列关键字static

文章目录

  • 1.静态变量
  • 2.静态成员变量


1.静态变量

在C++的,静态变量是一个非常有用的特性,它在程序执行期间只初始化一次,并在程序的整个执行期间都保持其值。

1.局部静态变量。定义在函数中,只初始化一次,不像普通的局部变量,会随着某次函数调用的结束而消失。
2.全局静态变量。作用域被限制在定义它们的程序文件中(即别的程序文件不能用这个变量),初始值为0。在多人开发项目时,为了防止与他人命令变量重名,可以将变量定位为static。

示例1: 不加static

#include <iostream>
using namespace std;void count() {int n = 0;n++;cout << "程序count()总共被调用了" << n << "次"<<endl;
}
int main(void) {for (int i = 0; i < 5; i++) {count();}
}
程序count()总共被调用了1次
程序count()总共被调用了1次
程序count()总共被调用了1次
程序count()总共被调用了1次
程序count()总共被调用了1

示例2: 加上static

#include <iostream>
using namespace std;void count() {static int n = 0;n++;cout << "程序count()总共被调用了" << n << "次"<<endl;
}
int main(void) {for (int i = 0; i < 5; i++) {count();}}
程序count()总共被调用了1次
程序count()总共被调用了2次
程序count()总共被调用了3次
程序count()总共被调用了4次
程序count()总共被调用了5

2.静态成员变量

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

  • 静态成员变量
    • 所有对象共享同一份数据
    • 在编译阶段分配内存
    • 类内声明,类外初始化
  • 静态成员函数
    • 所有对象共享同一个函数
    • 静态成员函数只能访问静态成员变量

示例:

class Person
{public:static int m_A; //静态成员变量//静态成员变量特点://1 在编译阶段分配内存//2 类内声明,类外初始化//3 所有对象共享同一份数据private:static int m_B; //静态成员变量也是有访问权限的
};
int Person::m_A = 10;
int Person::m_B = 10;void test01()
{//静态成员变量两种访问方式//1、通过对象Person p1;p1.m_A = 100;cout << "p1.m_A = " << p1.m_A << endl;Person p2;p2.m_A = 200;cout << "p1.m_A = " << p1.m_A << endl; //共享同一份数据cout << "p2.m_A = " << p2.m_A << endl;//2、通过类名cout << "m_A = " << Person::m_A << endl;//cout << "m_B = " << Person::m_B << endl; //私有权限访问不到
}int main() {test01();system("pause");return 0;
}

示例2:

class Person
{public://静态成员函数特点://1 程序共享一个函数//2 静态成员函数只能访问静态成员变量static void func(){cout << "func调用" << endl;m_A = 100;//m_B = 100; //错误,不可以访问非静态成员变量}static int m_A; //静态成员变量int m_B; // 
private://静态成员函数也是有访问权限的static void func2(){cout << "func2调用" << endl;}
};
int Person::m_A = 10;void test01()
{//静态成员变量两种访问方式//1、通过对象Person p1;p1.func();//2、通过类名Person::func();//Person::func2(); //私有权限访问不到
}int main() {test01();system("pause");return 0;
}
http://www.lryc.cn/news/514039.html

相关文章:

  • 使用Fn Connect之后,如何访问到其他程序页面?原来一直都可以!
  • 探索Composable Architecture:小众但高效的现代框架技术
  • 改投论文时如何重构
  • P8打卡——YOLOv5-C3模块实现天气识别
  • 基于微信小程序的校园点餐平台的设计与实现(源码+SQL+LW+部署讲解)
  • PyTorch快速入门教程【小土堆】之完整模型训练套路
  • 【AIGC】 ChatGPT实战教程:如何高效撰写学术论文引言
  • TTL 传输中过期问题定位
  • 非docker方式部署openwebui过程记录
  • 大模型的prompt的应用二
  • ubuntu 22.04安装ollama
  • 从企业级 RAG 到 AI Assistant,阿里云 Elasticsearch AI 搜索技术实践
  • Redis--高可用(主从复制、哨兵模式、分片集群)
  • 框架(Mybatis配置日志)
  • 人工智能-Python上下文管理器-with
  • 每天40分玩转Django:Django类视图
  • 自动化测试之Pytest框架(万字详解)
  • 基于51单片机(STC32G12K128)和8X8彩色点阵屏(WS2812B驱动)的小游戏《贪吃蛇》
  • 2011-2020年各省粗离婚率数据
  • C++高级编程技巧:模板元编程与性能优化实践
  • Mac 版本向日葵退出登录账号
  • SOLIDWORKS Composer在产品设计、制造与销售中的应用
  • Win11+WLS Ubuntu 鸿蒙开发环境搭建(一)
  • [CSAW/网络安全] Git泄露+命令执行 攻防世界 mfw 解题详析
  • MySQL 锁那些事
  • Linux中常用的基本指令和一些配套的周边知识详解
  • 深入理解Java中的Set集合:特性、用法与常见操作指南
  • Oracle 使用 sql profile 固定执行计划
  • 数字电路期末复习
  • 正则表达式 - 使用总结