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

C++学习笔记27:C++11成员变量缺省值和static补充

目录一、类内的成员变量可以给缺省值二、类内给的是缺省值不是真正的初始化三、初始化列表优先级更高四、static成员变量不能这样初始化五、静态成员函数补充六、小结一、类内的成员变量可以给缺省值在C11之后类中的非静态成员变量可以直接在声明的时候给缺省值。例如class Date { public: Date() { } void Print() const { cout _year - _month - _day endl; } private: int _year 2024; int _month 1; int _day 1; };这样创建对象时Date d; d.Print();如果构造函数没有在初始化列表中显示初始化这些成员变量那么他们就会使用类内给的缺省值。运行结果2024-1-1二、类内给的是缺省值不是真正的初始化这里要注意int _year 2024;他不是成员变量的真正定义和初始化。成员变量真正被创建是在对象创建时也就是构造函数的初始化阶段。类内的这个值本质上是如果构造函数没有显式初始化就用这个默认值。所以它更准确的说是缺省值。三、初始化列表优先级更高如果构造函数初始化列表中显式初始化了这个成员变量那么会优先使用初始化列表中的这个值。例如class Date { public: Date(int year, int month, int day) : _year(year) , _month(month) , _day(day) { } void Print() const { cout _year - _month - _day endl; } private: int _year 2024; int _month 1; int _day 1; };创建对象Date d(2024, 5, 1); d.Print();运行结果2024-5-1虽然类内给了int _year 2024; int _month 1; int _day 1;但构造函数初始化列表中传入了新值所以最终使用的是初始化列表中的值。简单记初始化列表有值用初始化列表 初始化列表没写才用类内缺省值。四、static成员变量不能这样初始化非静态成员可以在类内给缺省值但是 static 静态成员变量不可以这样定义。错误写法class A { private: static int _count 0; // 错误 );原因是static 成员变量属于整个类不属于某一个对象。他不存储在对象内部卫视存储在静态区。所以静态成员变量必须在类外单独定义和初始化。正确写法class A { private: static int _count; ); int A::_count 0;这里static int _count;是类内声明。int A::_count 0;是类外定义和初始化。五、静态成员函数补充静态成员函数没有 this 指针。所以它不能直接访问普通成员变量也不能直接调用普通成员函数。class Date { public: Date(int year 0) { _year year; } void Print() const { cout Print endl; } static void Func() { Print(); // 错误 } private: int _year; };这里因为静态成员函数没有 this 指针但其实普通成员函数有 this 指针所以在调用时静态成员函数相当于没有给普通成员函数传递 this 指针这个参数会导致编译器报错。相反的普通成员函数可以调用静态成员函数class Date { public: Date(int year 0) { _year year; } void Print() const { Func(); } static void Func() { cout static endl; } private: int _year; };如果执行Date d; d.Func();运行结果static说明普通成员函数成功调用了静态成员函数。六、小结本篇主要补充了C11成员变量缺省值和 static 静态成员的相关细节。需要记住C11之后非静态成员变量是可以在类内给缺省值类内给的是缺省值不是真正的初始化成员变量真正初始化发生在构造函数初始化阶段初始化列表有值时优先使用初始化列表static 成员变量属于类不属于对象static 成员变量需要在类内声明类外定义和初始化静态成员函数没有 this 指针静态成员函数不能调用普通成员函数普通成员函数可以调用静态成员函数。
http://www.gsyq.cn/news/1383728.html

相关文章:

  • 保姆级教程:在UE5.21里用LandscapingMapbox插件一键生成真实地形(附免费API Key获取避坑指南)
  • Blender/Unity/Three.js都支持它:深入浅出聊聊OBJ+MTL这对3D模型“黄金搭档”
  • 四年级下册语文第七单元作文:我的“自画像”
  • 3分钟掌握AI视频字幕去除终极技巧:Video Subtitle Remover完整指南
  • 别再硬编码了!用Unity动画事件实现音效与攻击判定的保姆级教程
  • 欧盟正式动手:关键零部件,中国供应不能超过40%
  • 5分钟上手OpenVSP:NASA开源飞机参数化设计工具终极指南
  • 如何快速将Taotoken接入Python项目实现大模型调用
  • 15分钟解LeetCode
  • 贝达喹啉:耐多药结核病治疗的破局之剑
  • 基于IRS2092的200W D类功放设计:从PWM原理到保护电路实战
  • 量子纠错码VarQEC:原理、实现与硬件优化
  • 企业法务数字化工具选型指南:专业系统、通用OA与低代码平台的对比
  • ROS导航避障不灵?手把手教你调好costmap_common_params.yaml里的关键参数
  • Midjourney粒子纹理控制实战手册(含12组可复用prompt模板+噪点映射对照表)
  • 告别资源管理混乱!用Unity Addressable的Group模板与初始化对象,打造可复用的项目配置流水线
  • Unity场景布局总对不齐?试试这个被新手忽略的‘Iso’视图(附切换技巧)
  • 用Unity和Blender搞懂泊松比:为什么你的3D模型一拉伸就‘瘦’了?
  • 游戏物理引擎中的‘材料手感’是怎么来的?聊聊Unity/UE4中的泊松比与胡克定律
  • 避坑指南:Unity VFX粒子特效穿帮?可能是Bounds没调对!
  • Hyperframes文生视频实战记录
  • 终极指南:5款Unity游戏去马赛克插件的完整使用教程
  • 高效配置华为光猫:实用解密工具完整指南
  • 倾斜摄影进阶:深度对比3mx与OSGB格式,在Unity项目里到底该选哪个?(附性能实测)
  • 短视频带货新趋势:AI短剧创作系统,自动化产出助力快速盈利
  • 【企业级AI Agent x 数据系统】【02】Function Calling 替代 Text-to-SQL:受控数据接口的工程范式
  • 如何打造个性化桌面伙伴:DyberPet桌面宠物框架完整指南
  • Unity角色控制器避坑指南:为什么你的角色总卡在斜坡上?详解Move、SimpleMove与Translate的区别
  • 论文查重还要花钱?书匠策AI免费查重功能,一文带你搞懂!
  • 体育学论文降AI工具免费推荐:2026年体育学毕业论文AIGC超标免费4.8元知网完整方案