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

【C++】静态成员

静态成员在 C++ 类中是一个重要的概念,它包括静态成员变量和静态成员函数。

一、静态成员变量

1.理论

  • 定义:由关键字static修饰类体中成员,称为类静态成员(static class member)。
  • 特点静态成员变量是类的所有对象共享的变量。与普通成员变量相比,无论创建了多少个类的实例,静态成员变量只有一份拷贝。
  • 初始化:静态成员变量需要在类外进行初始化,通常在类的实现文件中。
  • 访问:静态成员变量可以通过类名直接访问,不需要创建类的对象。也可以通过类的对象访问。
  • 用途:常用于存储类级别的信息(例如,计数类的实例数量)或全局数据需要被类的所有实例共享。

2.实战

#include <iostream>using namespace std;class Myclass{
public:int datas;static int staticValues;//定义一个静态成员变量
};
int Myclass::staticValues = 0;//初始化静态成员变量
int main()
{cout << Myclass::staticValues << endl;//直接对成员变量访问return 0;
}

二、静态成员函数

2.1理论

  • 定义:静态成员函数是可以不依赖于类的实例而被调用的函数。它不能访问类的非静态成员变量和非静态成员函数。
  • 访问:类似于静态成员变量,静态成员函数可以通过类名直接调用,也可以通过类的实例调用。
  • 用途:常用于实现与具体对象无关的功能,或访问静态成员变量。

2.2实战 

#include <iostream>using namespace std;
class Test{
public:void printInfor();};
class Myclass{
public:static int staticValues;//静态成员变量static int getStaticValue(){//静态成员函数return staticValues;}
};
int Myclass::staticValues = 0;//静态成员变量初始化
void Test::printInfor()
{Myclass::staticValues++;cout << Myclass::getStaticValue() << endl;//其他类的成员函数访问静态成员函数
}
int main()
{Test s1;cout << Myclass::staticValues << endl;cout << Myclass::getStaticValue() << endl;s1.printInfor();return 0;
}
存在的意义
  • 共享数据:允许对象之间共享数据,而不需要每个对象都有一份拷贝。
  • 节省内存:对于频繁使用的类,使用静态成员可以节省内存。
  • 独立于对象的功能:静态成员函数提供了一种在不创建对象的情况下执行操作的方法,这对于实现工具函数或管理类级别状态很有用。  

相关文章:

  • 单链表的查找
  • Python第三次作业
  • Linux:环境变量的特性及获取
  • OpenAI奥特曼豪赌1.42亿破解长生不老
  • python笔记进阶--模块、文件及IO操作(1)
  • 大数据篇 一篇讲明白 Hadoop 生态的三大部件
  • QT作业day2
  • GRE VPN——配置实验
  • 实验3 中文分词
  • 16:00面试,16:06就出来了,问的问题有点变态。。。
  • npm淘宝镜像源切换
  • Redis常见命令
  • 谭浩强第五版C语言课后习题(编程题)+答案
  • 优橙内推广西专场——5G网络优化(中高级)工程师
  • 【ML】类神经网络训练不起来怎么办 5
  • Akka系列(七):Actor持久化之Akka persistence
  • axios 和 cookie 的那些事
  • canvas 绘制双线技巧
  • css选择器
  • ES6系列(二)变量的解构赋值
  • Java编程基础24——递归练习
  • orm2 中文文档 3.1 模型属性
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • spring学习第二天
  • Swift 中的尾递归和蹦床
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • use Google search engine
  • vue数据传递--我有特殊的实现技巧
  • 聚类分析——Kmeans
  • 前端相关框架总和
  • 强力优化Rancher k8s中国区的使用体验
  • 写给高年级小学生看的《Bash 指南》
  • 用jQuery怎么做到前后端分离
  • No resource identifier found for attribute,RxJava之zip操作符
  • ​io --- 处理流的核心工具​
  • # Apache SeaTunnel 究竟是什么?
  • #if和#ifdef区别
  • $.ajax()
  • $jQuery 重写Alert样式方法
  • (4) PIVOT 和 UPIVOT 的使用
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (二)斐波那契Fabonacci函数
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (译)2019年前端性能优化清单 — 下篇
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .apk文件,IIS不支持下载解决
  • .NET 服务 ServiceController
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .Net 垃圾回收机制原理(二)
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .net 中viewstate的原理和使用
  • .net对接阿里云CSB服务
  • .net反编译的九款神器