C++——初始化成员列表

news2024/11/15 23:36:22

在C++中,初始化成员列表(Initializer List)是一种特殊的构造函数语法,用于在对象创建时直接初始化其成员。初始化成员列表通常用于以下几种情况:

1、初始化基类构造函数

一个类从其他类派生而来,它的构造函数要调用基类的构造函数,所以要初始化基类的成员列表。

代码示例:

#include <iostream>
using namespace std;

class Base{
    public:
        Base(int x):data(x){
            cout<<"Base constructor called with "<<data<<endl;
        }
    private:
        int data;    
};

class Derived:public Base{
    public:
        Derived(int x,int y):Base(x),data(y){
            cout<<"Derived constructor called with "<<data<<endl;
        }
    private:
        int data;
};
int main()
{
    Derived(10,20);
    return 0;
}

运行结果:

2、初始化常量成员

常量成员必须在构造函数中初始化,因为该成员变量一旦初始化,就不能再改变。

#include <iostream>
using namespace std;

class Myclass{
    private:
        int const Data;//常量成员
    public:
        Myclass(int value):Data(value){
            cout<<"Myclass constructor called with "<<Data<<endl;
        }
        
};
int main()
{
    Myclass obj(10);
    return 0;
}

运行结果:

3、初始化引用成员

引用成员定义后必须初始化,引用成员变量初始化必须绑定一个对象,并且绑定后的对象不能修改,所以必须初始化引用成员。

#include <iostream>
using namespace std;

class Myclass{
    private:
        int &refData;//引用成员
    public:
        Myclass(int &ref):refData(ref){
            cout<<"Myclass constructor called with reference "<<refData<<endl;
        }
};
int main()
{
    int data = 10;
    Myclass obj(data);
    return 0;
}

运行结果:

4、初始化需要特殊初始化的成员

某些情况下,成员变量需要特殊的初始化逻辑,而不是简单的赋值。例如,当成员变量是一个复杂的对象时,可能需要执行一些额外的初始化步骤。

代码示例:

#include <iostream>
using namespace std;

class ComplexObject{
    public:
        ComplexObject(const string& name){
            cout<<"ComplexObject constructor called with "<<name<<endl;
        }
};

class Myclass{
    private:
        ComplexObject complexObj;//需要特殊初始化的成员
    public:
        Myclass(const string &name):complexObj(name){
            cout<<"Myclass constructor called"<<endl;
        }
};
int main()
{
    Myclass obj("hello");
    return 0;
}

运行结果:Myclass中的成员函数的类型涉及到其他类,所以必须要对涉及到的类进行一些额外的初始化步骤。

5、初始化指针成员

当成员是一个指针时,通常需要在初始化成员列表中将其初始化为 nullptr 或者指向一个有效的对象。这个在之前RALL资源获取也讲过,主要方便程序员对内存的分配和释放,防止出现野指针的情况。

6、初始化多个成员变量

当类中有多个成员变量时,可以在初始化成员列表中一次初始化多个成员。

#include <iostream>
using namespace std;

class MyClass {
public:
    MyClass(int a, int b, int c) : data1(a), data2(b), data3(c) {
        cout << "MyClass constructor called" << endl;
    }

private:
    int data1;
    int data2;
    int data3;
};

int main() {
    MyClass obj(10, 20, 30);
    return 0;
}

总结:

需要初始化列表成员的情况主要分为:

1、派生类成员需要调用基类的构造函数

2、类成员变量是常量。

3、列表成员存在引用变量。

4、列表成员中存在指针变量

5、列表成员中存在需要特殊初始化的成员

6、存在多个成员变量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2121691.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

「超强力频闪发光」的超亮频闪光源LDR-PF系列

光源在机器视觉系统中起着重要作用&#xff0c;不同环境、场景及应用合适光源都不一样&#xff0c;今天我们来看看CCS光源的「超强力频闪发光」的超亮频闪光源PF系列。PF系列根据其形状分为环形&#xff0c;条形&#xff0c;同轴等。 以LDR-PF环形为例&#xff0c;它有如下特点…

【LabVIEW学习篇 - 19】:人机界面交互设计03

文章目录 运行菜单主菜单右键快捷菜单 运行菜单 菜单是人机交互非常重要的一个途径&#xff0c;它的好处是把需要的操作隐藏起来&#xff0c;当用户需要的时候才激活&#xff0c;因此相对于把所有的操作以按钮的形式放在界面上&#xff0c;可以节省很大的空间。 菜单有两种&a…

ubuntu 20.04 编译dcmtk

1 安装cmake 检查是否安装cmake。打开终端&#xff0c;运行如下命令&#xff1a; Cmake --version 如已安装&#xff0c;则显示正常显示cmake版本号。如显示错误&#xff0c;则需要安装cmake。 sudo apt-get install cmake-qt-gui 2 下载dcmtk源码 下载地址&#xff1a;&…

关于支付宝小程序客户端退出不了的问题的认知和退出的解决方案

结论&#xff1a; 支付宝小程序登录后会员退出&#xff0c;不仅要将客户端登录凭证清空&#xff0c;还要同步将服务端登录凭证清空。 猜测原因&#xff1a; 支付宝小程序会和webview差不多&#xff0c;用到cookie. 问题场景重现&#xff1a; 如图&#xff0c;登录后&#x…

如何将网络安全防范游戏化

组织对威胁的准备和恢复能力跟不上网络犯罪分子的进步。 一些首席执行官仍然认为网络安全需要偶尔干预&#xff0c;而不是持续关注。 但对于许多公司来说&#xff0c;情况并非如此&#xff1b;网络威胁准备需要协调一致的培训工作&#xff0c;因此网络安全团队在攻击发生时已…

CMDB是什么软件?对企业有什么用?

配置管理数据库缩写为CMDB&#xff0c;英文全称为Configuration Management Database&#xff0c;是一种用于记录和管理企业信息技术基础设施&#xff08;IT基础设施&#xff09;和所有相关资源的数据库软件。 CMDB的主要功能是收集、存储和分析所有IT基础设施和服务的信息&am…

《UniVS: Unified and Universal Video Segmentation with Prompts as Queries》要点提炼

论文来源&#xff1a;https://arxiv.org/abs/2402.18115 《UniVS: Unified and Universal Video Segmentation with Prompts as Queries》是2024CVPR中的一篇关于视频分割的论文&#xff0c; 主要内容&#xff1a; 论文提出了一个名为UniVS的新型统一视频分割架构&#xff0c…

使用Inno Setup制作程序安装包

Inno Setup软件安装见&#xff1a; Inno Setup下载、安装和增加简体中文安装语言 一、制作程序安装包 先准备要被打包的可执行文件及其环境文件&#xff1b;另外还需要三个txt文件 三个文件中的内容如下&#xff0c;在使用程序安装包时会看到文件中的内容&#xff0c;同时文…

啊,原来她就是李飞飞

今天CSDN的头条看到了著名的AI大模型专家李飞飞。 李飞飞教授在人工智能领域&#xff0c;尤其是在大模型的发展中&#xff0c;做出了诸多贡献。以下是对她的一些公开经历和研究成果的详细介绍&#xff1a; 公开经历 教育背景&#xff1a;李飞飞获得了普林斯顿大学的物理学士…

【原创教程】自动化工程案例01:8工位插针装配机03-程序解读

在前面两篇文章中&#xff0c;我们介绍了8工位设备每个工位的情况&#xff0c;然后我们介绍了触摸屏的情况&#xff0c;接着我们来看一下程序。关于一些实物照片不宜公开发表&#xff0c;需要的可以私信。 程序系统块设置 系统块中的模块实际上是我们所使用的的硬件设施 符号…

第T7周:咖啡豆识别

本文为&#x1f517;365天深度学习训练营 中的学习记录博客原作者&#xff1a;K同学啊 ●难度&#xff1a;夯实基础 ●语言&#xff1a;Python3、TensorFlow2 要求&#xff1a; 1.自己搭建VGG-16网络框架 2.调用官方的VGG-16网络框架 拔高&#xff08;可选&#xff09;&#…

初识爬虫1

学习路线&#xff1a;爬虫基础知识-requests模块-数据提取-selenium-反爬与反反爬-MongoDB数据库-scrapy-appium。 对应视频链接(百度网盘)&#xff1a;正在整理中 爬虫基础知识&#xff1a; 1.爬虫的概念 总结&#xff1a;模拟浏览器&#xff0c;发送请求&#xff0c;获取…

新版idea菜单栏展开与合并

新版idea把菜单栏合并了看着很是不习惯&#xff0c;找了半天原来在这里展开 ① 点击文件 -> 设置 ② 点击外观与行为 -> 外观 -> 合并主菜单和窗口标题 然后确定&#xff0c;重启即可

如何应对 Android 面试官 -> 启动如何进行优化(上)?玩转 Android StartUp

前言 本章主要围绕 App 的启动流程如何优化进行讲解&#xff1b; 将启动优化&#xff0c;首先要了解的就是 app 的启动流程&#xff0c;只有清晰并完善的了解了 启动流程 才能更好的进行优化&#xff1b; App 启动流程 在将 AMS 的时候&#xff0c;其实已经讲解了 App 的启动…

喜报! 炼石入选中国信通院《数据安全产业技术产品服务全景图》

近日&#xff0c;在2024中国国际大数据产业博览会“数据安全产业发展”交流活动上&#xff0c;中国信息通信研究院安全研究所副所长魏薇发布了《数据安全产业技术产品服务全景图》&#xff08;以下简称“全景图”&#xff09;。全景图从数据安全产业的概念和内涵出发&#xff0…

强大的3款自动爬虫利器,再也不用手撸代码了

爬虫是一种自动浏览互联网的程序&#xff0c;它按照一定的算法顺序访问网页&#xff0c;并从中提取有用信息。爬虫通常由以下几部分组成&#xff1a; - 用户代理&#xff08;User-Agent&#xff09;&#xff1a;模拟浏览器访问&#xff0c;避免被网站识别为机器人。 - 请求处…

Springcould -第一个Eureka应用 --- day02

标题 Eureka工作原理Spring Cloud框架下的服务发现Eureka包含两个组件&#xff0c;分别是&#xff1a;Eureka Server与Eureka Client。Eureka Server&#xff1a;Eureka Client&#xff1a; 搭建Eureka Server步骤&#xff1a;步骤1&#xff1a;创建项目&#xff0c;引入依赖步…

iMeta | 中科院植物所周世良团队和河北工程大学刘艳磊团队揭示现代丝绸之路东段植物物种多样性格局及其影响因素

现代丝绸之路东段植物物种多样性格局及其影响因素研究 iMeta主页&#xff1a;http://www.imeta.science 研究论文 ● 原文链接DOI: https://doi.org/10.1002/imt2.74 ● 2023年1月9日&#xff0c;中国科学院植物研究所周世良团队与河北工程大学刘艳磊团队在iMeta在线发表了题…

【32单片机篇】项目:智能台灯

一、项目需求 1. 红外传感器检测是否有人&#xff0c;有人的话实时检测距离&#xff0c;过近则报警&#xff1b;同时计时&#xff0c;超过固定时间则报警&#xff1b; 2. 按键 1 切换工作模式&#xff1a;智能模式、按键模式、远程模式&#xff1b; 3. 智能模式下&#xff0c;…

支付宝开放平台-开发者社区——AI 日报「9 月 10 日」

1 Anthropic安全负责人&#xff1a;在超级A&#xff01;「毀灭」人类之前&#xff0c;我们可以做这些准备 机器之心 丨阅读原文 Anthropic公司为应对A发展带来的港在风险&#xff0c;发布了负责任扩展策路(RSP)&#xff0c;旨在通过技术和组织协议管理功能日益强大的Al系统。…