码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【C++】类和对象 _初始化列表 &必须使用初始化列表的三种情况【进阶篇 _复习专用】


    1.初始化列表

    初始化列表是成员变量定义的地方,有着很多的应用场景。

    初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。

    举个栗子: 

    1. class Date
    2. {
    3. public:
    4. Date(int year, int month, int day)
    5. : _year(year)
    6. , _month(month)
    7. , _day(day)
    8. {}
    9. private:
    10. int _year = 0;//缺省值
    11. int _month;
    12. int _day;
    13. };

    2.默认构造函数

    默认构造函数的三种情况:

    • 用户不写,编译器自动生成
    • 参数全缺省
    • 构造函数无参

    三种情况都可以不使用参数进行调用。

    3.必须使用初始化列表的三种情况

    编译器默认生成的构造函数:内置类型不做处理,自定义类型调用它的构造函数。

    3.1 自定义类型没有默认构造函数

    1. class Time
    2. {
    3. public:
    4. Time(int hour)
    5. {
    6. _hour = hour;
    7. }
    8. private:
    9. int _hour;
    10. };
    11. class Date
    12. {
    13. public:
    14. Date(int year, int hour)
    15. {
    16. _year = year;
    17. Time t(hour);
    18. _t = t;
    19. }
    20. private:
    21. int _year;
    22. Time _t;
    23. };

    Date实例化对象的时候会调用Date的构造函数,Date的构造函数对内置int不做处理,对自定义类型Time会调用它的构造函数。

    要初始化_t对象,可以使用函数体内初始化,但是还是会走初始化列表调用Time的默认构造函数。

    正确使用初始化列表:

    1. class Time
    2. {
    3. public:
    4. Time(int hour)
    5. {
    6. _hour = hour;
    7. }
    8. private:
    9. int _hour;
    10. };
    11. class Date
    12. {
    13. public:
    14. Date(int year, int hour)
    15. :_t(hour)
    16. ,_year(year)
    17. {}
    18. private:
    19. int _year;
    20. Time _t;
    21. };

    使用初始化列表初始化_t对象,一个参数hour会调用它Time一个参数的构造函数,完成初始化。

    3.2 const成员

    const成员必须在定义的时候进行初始化,所以只能使用初始化列表。

    1. class Date
    2. {
    3. public:
    4. Date(int year, int num)
    5. : _year(year)
    6. , N(num)
    7. {}
    8. private:
    9. int _year;
    10. const int N;
    11. };

    3.3 引用成员

    引用成员也必须在定义的时候进行初始化。

    1. class Date
    2. {
    3. public:
    4. Date(int& x)
    5. : ref(x)
    6. {}
    7. private:
    8. int& ref;
    9. };

    4.C++11新增缺省值

    使用场景:没有显示给值的时候。

    1. class Date
    2. {
    3. public:
    4. Date(int year)
    5. {}
    6. private:
    7. int _year = 0;//缺省值
    8. };

    初始化列表显示给值的情况下就不会走缺省:

    1. class Date
    2. {
    3. public:
    4. Date(int year)
    5. : _year(year)
    6. {}
    7. private:
    8. int _year = 0;//缺省值
    9. };

     

    总结:内置类型可以在函数体中进行初始化,也可以使用初始化列表定义初始化;上面的三种情况只能使用初始化列表定义初始化;

    能使用初始化列表的话尽量使用初始化列表。

  • 相关阅读:
    CSS accent-color + 自己封装 radio
    cmake交叉编译时链接到x86库的问题
    码蹄集 - MT3149 · AND - 数据不是很强,暴力剪枝就能骗AC
    [深度学习][pytorch]pytorch实现一个简单得线性回归模型并训练
    Python对数据进行分类统计
    负载均衡算法实现
    LeetCode高频题:n杯溶液按照顺序排成一排,可以混合相邻2杯,合并代价/时间是两杯质量和,经过n-1次合并为1杯,最小时间/代价是多少
    Python基础08 面向对象的基本概念
    从区划边界geojson中查询经纬度坐标对应的省市区县乡镇名称,开源Java工具,内存占用低、高性能
    什么是云计算?什么是IaaS、Paas、Saas?
  • 原文地址:https://blog.csdn.net/qq_63179783/article/details/127591881
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号