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

C++学习笔记26:static 静态成员

目录一、为什么需要静态成员二、静态成员变量三、静态成员变量需要类外定义四、用静态成员变量统计对象个数五、静态成员变量不占对象空间六、静态成员函数七、静态成员函数没有 this 指针八、静态成员函数可以访问静态成员九、调用方式1. 通过类名调用2. 通过对象调用十、小结一、为什么需要静态成员在C中普通成员变量是属于每个对象的。例如class A { private: int _a; };如果多创建几个对象A a1; A a2; A a3;那么这几个对象都有自己独立的 _a。但是有些数据不应该只属于某一个对象应该属于整个类。比如想统计一共创建了多少个对象就可以使用静态成员变量。二、静态成员变量静态成员变量使用 static 修饰。例如class A { public: A() { _count; } private: static int _count; };这里 _count 是静态成员变量。它不属于某一个具体的对象而是属于整个类。也就是说所有 A 类对象共享同一个 _count三、静态成员变量需要类外定义静态成员变量虽然在类中声明还需要在类外定义。class A { private: static int _count; }; int A::_count 0;注意static int _count;这只是声明。int A::_count 0;这才是定义和初始化。如果只在类中声明没有在类外定义可能会出现来连接错误。四、用静态成员变量统计对象个数示例#include iostream using namespace std; class A { public: A() { _count; } A(const A a) { _count; } static int GetCount() { return _count; } private: static int _count; }; int A::_count 0; int main() { A a1; A a2; A a3(a1); cout A::GetCount() endl; return 0; }运行结果3这里创建了 a1、a2又用 a1 拷贝了 a3所以构造了 3 个对象。静态成员变量 _count 被所有对象共享可以用来统计对象数量。五、静态成员变量不占对象空间普通成员变量属于对象会影响对象大小。但是静态成员变量属于类存放在静态区不存放在对象内部。例如class A { private: int _a; static int _count; };这里对象只存 _a不存 _count。所以静态成员变量不会增加对象的大小。六、静态成员函数静态成员函数也使用 static 修饰。例如class A { public: static int GetCount() { return _count; } private: static int _count; };静态成员函数可以通过类名直接调用。A::GetCount();不需要先创建对象。七、静态成员函数没有 this 指针普通成员函数调用时会隐含传递 this 指针。但是静态成员函数不属于某一个具体的对象所以没有 this 指针。错误示例class A { public: static void Func() { cout _a endl; // 错误 } private: int _a; };因为 _a 是普通成员变量必须依赖具体对象存在。而静态成员函数没有 this 指针不知道一概访问哪个对象的 _a。八、静态成员函数可以访问静态成员静态成员函数可以直接访问静态成员变量。#include iostream using namespace std; class A { public: static int GetCount() { return _count; } private: static int _count; };因为 _count 属于类不属于某个对象所以静态储层元函数可以访问它。简单总结静态成员函数可以访问静态成员 静态成员函数不能直接访问非静态成员。九、调用方式静态成员函数有两种调用方式。1. 通过类名调用A::GetCount();这种方式更推荐因为他能说明 GetCount 属于类本身。2. 通过对象调用A a; a.GetCount();这种方式也可以但不如类名调用清晰。十、小结本篇主要学习了C中的 static 静态成员。需要记住静态成员变量使用 static 修饰静态成员变量属于类不属于某个对象所有对象共享一个静态成员变量静态成员变量需要在类外定义和初始化静态成员变量不占对象空间静态成员函数也使用 static 修饰静态成员函数没有 this 指针静态成员函数不能直接访问普通成员变量静态成员函数可以直接访问静态成员变量静态成员函数推荐通过类名调用。static 静态成员适合用来保存和类整体相关的数据例如对象计数、共享配置等。
http://www.rkmt.cn/news/1371943.html

相关文章:

  • 2026年5月抚顺东洲地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 检测回收中心
  • 【ChatGPT故事化表达黄金法则】:20年AI内容专家亲授3步叙事框架,让提示词转化率提升300%
  • 2026年5月甘南舟曲地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 检测回收中心
  • 【限时解锁】Gemini深度研究模式私有化部署方案:仅3家头部科研机构掌握的本地化推理链配置
  • 【ChatGPT投资人邮件撰写黄金法则】:20年FA/VC顾问亲授——3类高回复率模板+5个致命话术雷区
  • 【小红书算法偏爱的文案结构】:ChatGPT无法自学的3层语义嵌套技巧(含2024Q2平台最新流量权重白皮书节选)
  • 2026年5月甘南卓尼地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 检测回收中心
  • 2026年5月大庆让胡路地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 检测回收中心
  • 为什么你的ChatGPT长文档摘要总漏关键条款?——基于17份合同+89篇论文的注意力热力图反向归因分析
  • 对比按量计费与Token Plan套餐如何为项目选择更优成本模型
  • 2026年5月大庆萨尔图地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 检测回收中心
  • Taotoken的Token Plan套餐如何帮助初创公司控制AI实验成本
  • 新手注册Taotoken后第一步如何获取并测试API Key
  • 构建内部知识问答机器人时利用Taotoken聚合多模型提升回答质量
  • 利用Taotoken实现AI应用的多模型灾备与智能路由提升服务稳定性
  • 2026年5月红河河口地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 诚信金利回收
  • 2026年5月抚顺新宾地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 检测回收中心
  • 3步构建物联网数字孪生:Eclipse Ditto实战指南
  • 2026年5月大庆肇源地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 检测回收中心
  • 有哪些免费好用的在线论文排版工具值得推荐?
  • Solr CVE-2019-0193漏洞深度解析:DataImportHandler远程代码执行原理与实战修复
  • 通过curl命令快速测试Taotoken不同模型的响应速度与效果
  • 2026年5月湖州南浔地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 诚信金利回收
  • Jupyter notebook 最简安装方法
  • 2026年5月常德安乡地区黄金回收白银铂金回收门店推荐TOP1 地址及联系方式 - 检测回收中心
  • 2026这6款封神降AI率工具大起底,一键把AIGC率降至安全线!
  • 混合量子-经典机器学习在HPC环境下的性能调优与实战
  • 校准机器学习与SHAP分析:构建可信专利价值评估模型
  • CleanMyWechat:一键解放你的PC微信存储空间
  • 技术博客写作:分享知识,提升影响力