news 2026/4/16 13:51:13

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/4/16 12:46:34

AI净界-RMBG-1.4保姆级教学:从GitHub源码编译到Docker镜像构建

AI净界-RMBG-1.4保姆级教学&#xff1a;从GitHub源码编译到Docker镜像构建 1. 为什么需要自己编译RMBG-1.4镜像 市面上已有不少一键式背景去除工具&#xff0c;但真正用过的人会发现&#xff1a;很多服务要么限制图片尺寸&#xff0c;要么处理发丝边缘时毛边明显&#xff0c;…

作者头像 李华
网站建设 2026/4/15 16:31:41

InstructPix2Pix入门指南:设计师转型AI提示工程师的5个关键认知

InstructPix2Pix入门指南&#xff1a;设计师转型AI提示工程师的5个关键认知 1. 从PS高手到“指令指挥官”&#xff1a;一场修图范式的悄然转移 你有没有过这样的时刻&#xff1a; 花半小时调色&#xff0c;结果客户说“再暖一点&#xff0c;但别太黄”&#xff1b; 精修人像3…

作者头像 李华
网站建设 2026/4/8 11:16:04

Swin2SR防炸显存黑科技:24G显卡也能处理4K图片的秘诀

Swin2SR防炸显存黑科技&#xff1a;24G显卡也能处理4K图片的秘诀 你有没有遇到过这样的窘境&#xff1a; 明明手头有一张512512的AI草稿图&#xff0c;想放大成高清海报打印&#xff0c;却在点击“超分”按钮后—— GPU显存瞬间飙红&#xff0c;服务直接崩溃&#xff0c;日志里…

作者头像 李华
网站建设 2026/4/16 13:05:04

ESP32-S3 PSRAM扩展配置:一文说清连接原理

ESP32-S3 PSRAM扩展实战手记&#xff1a;从焊错引脚到稳定跑满8MB的全过程你有没有试过——LVGL界面一动就卡顿&#xff0c;TensorFlow Lite模型加载直接失败&#xff0c;malloc()返回空指针&#xff0c;串口只打出半句日志就哑火&#xff1f;我第一次把APS6404L焊上ESP32-S3开…

作者头像 李华
网站建设 2026/4/15 0:33:11

Raspberry Pi OS 64位下ROS2安装超详细版教程

Raspberry Pi 5 ROS2 Humble&#xff1a;在 Bookworm 64 位系统上跑通一个真正能干活的机器人节点你刚拿到那块闪着金属光泽的树莓派5&#xff0c;拆开散热片、插好TF卡、烧入最新版 Raspberry Pi OS Bookworm 64-bit —— 然后兴冲冲敲下sudo apt install ros-humble-desktop…

作者头像 李华
网站建设 2026/4/1 16:09:20

Python基于Vue的健身房管理系统设计与实现 django flask pycharm

这里写目录标题项目介绍项目展示详细视频演示技术栈文章下方名片联系我即可~解决的思路开发技术介绍性能/安全/负载方面python语言Django框架介绍技术路线关键代码详细视频演示收藏关注不迷路&#xff01;&#xff01;需要的小伙伴可以发链接或者截图给我 项目介绍 随着时代的…

作者头像 李华