news 2026/5/13 15:32:15

C++之构造函数初始化列表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++之构造函数初始化列表

文章目录

  • 构造函数的初始化列表
  • 需要显式初始化列表的场景
  • 初始化顺序

构造函数的初始化列表

  • 构造函数对数据成员进行初始化还可以通过成员初始化列表的方式完成。语法格式:
构造函数名(参数表):成员1(初始值参数),成员2(初始值参数){}
  • 实例
#include<iostream>usingnamespacestd;classStudent{private:string m_name;intm_age;intm_no;public:Student(conststring&name,intage,intno):m_name(name),m_age(age),m_no(no){cout<<"Student constructor"<<endl;}voidsetName(conststring&name){m_name=name;}voidsetAge(intage){if(age<0)cout<<"无效年龄"<<endl;elsem_age=age;}voidsetNo(intno){m_no=no;}voidsleep(inthour){cout<<"我睡了"<<hour<<"小时"<<endl;}voideat(conststring&food){cout<<"我正在吃"<<food<<endl;}voidlearn(conststring&course){cout<<"我正在学习"<<course<<endl;}voidwho(){cout<<"我叫: "<<m_name<<", 我今年"<<m_age<<endl;}};intmain(void){Students1("张飞",21,10003);s1.who();s1.eat("烧烤");Students2("刘备",28,10000);s2.who();s2.learn("C++");return0;}

需要显式初始化列表的场景

  • 一般而言,使用初始化列表和在构造函数体对成员变量进行赋初值,两者区别不大,可以任选一种,但是下面几种场景必须要使用初始化列表:
    • 如果有类类型的成员变量(成员子对象),而该类又没有无参构造函数,则必须要通过初始化列表显式指明其初始化方式
    • “const”修饰的成员变量(常成员变量)必须要在初始化列表中初始化
    • “引用型”成员变量必须要在初始化列表中初始化
#include<iostream>usingnamespacestd;classA{private:intm_data;public:A(intdata){cout<<"A(int)"<<endl;m_data=data;}};classB{private:A m_a;public:B(void):m_a(123){cout<<"B(void)"<<endl;}};intmain(void){B b;//一定会去构造成员对象m_a , 未指定如何构造,系统去调用m_a的无参构造函数return0;}
#include<iostream>usingnamespacestd;intnum=12;classA{public:int&m_r;constintm_c;/* * error A(void){ m_r = num; m_c = 100; } */A(void):m_r(num),m_c(100){}};intmain(void){A a;cout<<a.m_r<<" "<<a.m_c<<endl;return0;}

初始化顺序

  • 类中成员变量按声明顺序依次被初始化,而与初始化表中的顺序无关
#include<iostream>usingnamespacestd;classA{public:A(inta){cout<<"A constuctor"<<endl;}};classB{public:B(intb){cout<<"B constuctor"<<endl;}};classC{private:A m_a;B m_b;public:C(inta,intb):m_b(b),m_a(a){}};intmain(void){Cc(1,2);return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 0:40:29

Janus-Pro-7B快速体验:开箱即用的多模态AI解决方案

Janus-Pro-7B快速体验&#xff1a;开箱即用的多模态AI解决方案 1. 为什么这款模型值得你花10分钟试试&#xff1f; 你有没有遇到过这样的情况&#xff1a;想让AI看懂一张产品图并描述细节&#xff0c;又希望它能根据一段文字生成高清海报&#xff0c;还得支持连续对话追问——…

作者头像 李华
网站建设 2026/5/11 0:40:13

基于LightOnOCR-2-1B的LaTeX数学公式识别效果展示

基于LightOnOCR-2-1B的LaTeX数学公式识别效果展示 1. 为什么数学公式识别一直是个难题 学术论文里的数学公式&#xff0c;看起来只是几行符号组合&#xff0c;但对OCR系统来说&#xff0c;它们就像迷宫一样复杂。分式嵌套、上下标交错、积分符号与极限条件并存&#xff0c;再…

作者头像 李华
网站建设 2026/5/6 6:31:33

Arduino Uno R3开发板硬件架构深度剖析

Arduino Uno R3&#xff1a;一块被低估的“教科书级”硬件系统你有没有试过&#xff0c;在凌晨三点盯着串口监视器里跳动的乱码发呆&#xff1f;手边是刚焊好的温湿度节点&#xff0c;DHT22读数忽高忽低&#xff0c;OLED闪得像迪厅灯球&#xff0c;而CH340G在Windows设备管理器…

作者头像 李华
网站建设 2026/5/5 5:29:46

完整指南:树莓派插针定义基础知识全掌握

树莓派40针排针&#xff1a;不是接线图&#xff0c;而是你的硬件操作系统手册 你有没有过这样的经历&#xff1f; 刚把温湿度传感器焊好&#xff0c;通电一测——树莓派黑屏重启&#xff1b; 换了个IC屏幕&#xff0c; i2cdetect -y 1 扫出来一片空格&#xff0c;反复确认…

作者头像 李华
网站建设 2026/5/10 6:42:06

参考文献崩了?专科生专属的AI论文网站 —— 千笔·专业学术智能体

你是否在论文写作中感到力不从心&#xff1f;选题难、查文献费时、格式混乱、查重率高&#xff0c;这些难题是否让你夜不能寐&#xff1f;专科生的你&#xff0c;面对繁重的学术任务&#xff0c;常常感到无从下手。别再焦虑&#xff0c;千笔AI——专为专科生打造的智能论文助手…

作者头像 李华
网站建设 2026/5/2 19:42:00

手把手教你刷写树莓派4系统镜像(零基础)

刷写树莓派4系统镜像&#xff1a;一次真正“看得见”的启动之旅 你有没有试过——把一张刚烧好的SD卡插进树莓派4&#xff0c;通电、等待、再等待……屏幕始终黑着&#xff0c;电源灯红得固执&#xff0c;绿灯偶尔微弱地闪两下&#xff0c;像在无声抗议&#xff1f;你反复检查…

作者头像 李华