C++:拷贝构造函数的初始化列表

拷贝构造函数的初始化列表是在拷贝构造函数的定义中出现的一组初始值,用于初始化新创建的对象的成员变量。它的语法是在构造函数的声明后面使用冒号(:)来开头,然后列出要初始化的成员变量和它们的初始值。初始化列表的优点在于它允许在对象构造之前对成员变量进行初始化,并且可以直接初始化成员变量,而不是先调用默认构造函数再进行赋值。这样可以提高效率,避免不必要的额外操作。

示例:
class RolePlayer {
public:
    //带有初始化列表的拷贝构造函数
    RolePlayer(const RolePlayer & other) : m_NPCName(other.m_NPCName), m_nHP(other.m_nHP)   {
        std::cout << "拷贝构造函数执行成功" << std::endl;
    }
    
    void SetName(char * m_NPCName) {
        this->m_NPCName = m_NPCName;
    }
​
    char * GetName() {
        return this->m_NPCName;
    }
    
private:
    char * m_NPCName;
    int m_nHP;

拷贝构造函数使用了初始化列表来初始化成员变量 m_NPCNamem_nHP。这意味着当调用拷贝构造函数时,会将另一个 RolePlayer 对象的 m_NPCNamem_nHP 成员变量的值分别复制到新对象的相应成员变量中。

在函数中进行调用:

int main() {
​
    RolePlayer roleA;
    char szBuffer[] = "WolF1";
    roleA.SetName(szBuffer);
​
    RolePlayer roleB(roleA);
    std::cout << roleB.GetName() << std::endl;
​
​
    system("pause");
    return 0;
}

创建一个 RolePlayer 对象 roleA,创建一个字符数组 szBuffer,并将字符串 "WolF1" 存储在其中。接着调用 SetName 方法,将 szBuffer 中的字符串作为 roleA 的名称设置。使用 roleA 对象创建另一个 RolePlayer 对象 roleB,这将触发拷贝构造函数的调用。在拷贝构造函数中,会将 roleA 的名称和HP值复制到 roleB 中。

最后输出的结果为:

可以看到此时roleB与roleA的名称一样也是WolF1,就是因为在拷贝构造函数中我们携带了初始化列表RolePlayer(const RolePlayer & other) : m_NPCName(other.m_NPCName), m_nHP(other.m_nHP),使得对象在构造之前直接对成员变量进行初始化。

但是在上述内容中存在问题:在拷贝构造函数中,m_NPCName 是一个指向 char 类型的指针,它指向的是动态分配的内存。在拷贝构造函数中只是简单地复制了指针的值,这意味着新对象和原对象将共享相同的内存地址,而不是进行深拷贝。这可能会导致潜在的问题,这个问题我们留到下一篇内容深拷贝与浅拷贝中进行分析。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux--进程控制(1)

文章衔接&#xff1a; Linux--环境变量-CSDN博客 Linux--地址空间-CSDN博客 目录 1.进程创建 2.进程的终止 2.1想明白&#xff1a;终止是在做什么&#xff1f; 2.2进程终止的三种情况 2.3 进程如何终止 3.进程等待 &#xff08;wait/waitpid&#xff09; 1.进程创建 在li…

vue中form表单中select下拉v-model绑定有数值,但下拉框不显示值的情况

vue中form表单中select下拉v-model绑定有数值&#xff0c;但下拉框不显示值的情况 场景复现&#xff1a; 我将后端获取的数据手动赋值值给select的下拉v-model绑定对象对应的值&#xff0c;但在前端下拉框不显示我赋值的通过v-model给的值&#xff0c;通过控制台打印v-mode的值…

Linux常用监控命令(笔试面试常考)

1.、free命令 [rootRocky8-node1 ~]# free -htotal used free shared buff/cache available Mem: 1.7Gi 1.1Gi 69Mi 31Mi 554Mi 436Mi Swap: 2.0Gi 258Mi 1.7Gi free命令是Linux系统中用…

Java实战:确定给定日期是一年的第几天

本次实战&#xff0c;我们将探讨如何确定给定日期是一年中的第几天。为此&#xff0c;我们提供了三种不同的方法&#xff0c;每种方法都有其独特的实现方式和适用场景。 方法一&#xff1a;不使用数组 这种方法通过Scanner类获取用户的输入&#xff0c;包括年份、月份和日期。…

致远互联 OA fileUpload.do 文件上传漏洞

声明&#xff1a; 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 简介 致远OA是一款企业级办公自动化软件&#xff0c;提供…

使用selenium时出现element click intercepted报错的解决办法

win10&#xff0c;python3.8.10。 selenium版本如下&#xff08;用pip38 show selenium查看&#xff09;&#xff1a; 在定位中&#xff0c;定位了一个按钮&#xff08;特点&#xff1a;button下还有span然后才是文本&#xff09;&#xff0c;代码如下&#xff1a; from sele…

科技论文网站:中国科技论文在线

文章目录 1. Intro2. Main3. Cons Evaluation彩蛋&#xff1a;科学素质 这是作者最后一次发这种级别的科普文章 1. Intro 中国科技论文在线是经教育部批准&#xff0c;由教育部科技发展中心主办&#xff0c; 利用现代信息技术手段&#xff0c;打破传统出版物的概念&#xff0c…

苍穹外卖day8(2)用户下单、微信支付

文章目录 前言一、用户下单1. 业务流程2. 接口设计3. 数据库设计3.1 订单表orders3.2 订单明细表 order_detail 4. 代码实现 二、订单支付 前言 用户下单 因为订单信息中包含了其他业务中的数据&#xff0c;在逻辑处理中涉及了多个其他业务&#xff0c;比如要判断地址簿、购物…

基于springboot,vue停车管理系统

目录 项目介绍: 图片展示 运行环境 获取方式 项目介绍: 权限划分&#xff1a;用户和管理员 用户&#xff1a; 具有登录&#xff0c;注册&#xff0c;退出登录的功能 首页&#xff1a;展示一个欢饮页面 个人中心&#xff1a;展示关于个人的信息&#xff0c;以及停车信息…

Unreal Engine创建Plugin

打开UE工程&#xff0c;点击编辑&#xff0c;选择插件 点击“新插件”按钮&#xff0c;选择“空白选项”填入插件名字"MultiPlayerPlugin"&#xff0c;填入插件作者、描述&#xff0c;点击“创建插件”按钮打开C工程&#xff0c;即可看到插件目录&#xff0c;编译C工…

ai论文生成神器——快速完成论文任务!

在这个AI写作的时代&#xff0c;大家都在使用AI写作作为论文辅写工具。用过ChatGPT写论文的小伙伴应该都知道&#xff0c;ChatGPT是通过对话或提问形式获取的AI生成内容&#xff0c;提供不了专业的论文写作标准&#xff0c;例如自动生成封面、目录、摘要、参考文献等部分。而专…

面试集中营—ElasticSearch架构篇

一、为什么用ElasticSearch&#xff1f; 1、支持多种数据类型。它可以处理非结构化、数值和地理信息等多种类型的数据&#xff1b; 2、简单的RESTful API。ES提供了一个简单易用的RESTful API&#xff0c;使得它可以从任何编程语言中调用&#xff0c;降低了学习的曲线。 3、近实…

德语口语学习的8种练习方法

简洁明了一点&#xff0c;方便大家理解&#xff0c;我总结了以下8点&#xff1a; 1.模拟对话&#xff1a; 创造实际生活场景&#xff0c;例如购物、问路、餐厅点餐等&#xff0c;并自言自语或者与伙伴一起模拟这些对话。 参加角色扮演活动&#xff0c;通过不同情境练习口语。…

Camtasia2024破解版激活许可证秘钥永久免费使用

Camtasia Studio是一款专业的屏幕录像和视频编辑软件套装&#xff0c;它提供了从屏幕录制到视频编辑、菜单制作、视频播放等一系列功能。以下是对Camtasia Studio及其2024年最新版本的详细介绍。 一、Camtasia Studio概述 Camtasia Studio是一款集屏幕录制、视频剪辑、菜单制…

java:SpringBoot入门

Spring 提供若干子项目,每个项目用于完成特定功能 Spring Boot 可以简化配置并且快速开发 SpringBootWeb快速入门 创建Springboot模块并使用Springweb依赖 在类上添加注解 RestController可以将字符串自动转成json返回数据给页面 再在方法上添加注解 RequestMapping(&…

深入理解GTK、Qt、AWTK:跨平台GUI框架对比

目录标题 GTK特性&#xff1a;优点&#xff1a;缺点&#xff1a; Qt特性&#xff1a;优点&#xff1a;缺点&#xff1a; AWTK特性&#xff1a;优点&#xff1a;缺点&#xff1a; 适用场景 在当今的软件开发领域&#xff0c;图形用户界面&#xff08;GUI&#xff09;的开发是不可…

Log4j日志框架多种日志级别

Log4j日志框架定义了多种日志级别&#xff0c;这些级别按照优先级从高到低排列如下&#xff1a; OFF&#xff1a;这是最高等级的日志级别&#xff0c;用于关闭所有日志记录。FATAL&#xff1a;指出每个严重的错误事件将会导致应用程序的退出。ERROR&#xff1a;表明发生错误事…

python之excel加工处理小案例一则

一、工具用途 工作中&#xff0c;需要对各类excel进行加工处理&#xff0c;当表和字段比较多时&#xff0c;关联条件又有多个&#xff0c;每次通过execl的vlookup之类的关联公式手工可以解决工作需求&#xff0c;但一般耗时较长&#xff0c;且人工统计匹配也存在出错的情况。 …

官方售价299元的自媒体博客资讯类wordpress主题

官方售价299元的自媒体博客资讯类wordpress主题。 自媒体一号是一款由主题巴巴团队原创设计开发的WordPress主题&#xff0c;这款主题页面布局简约大气&#xff0c;设计细节精美考究&#xff0c;内置功能非常强大&#xff0c;通过后台的主题设置面板&#xff0c;你可以轻松自定…

kaggle不显示中文字体

链接&#xff1a;【kaggle】在matplotlib中使用中文字体_kaggle使用中文字体打印图片-CSDN博客 下载字体链接 完整代码&#xff1a; import matplotlib.pyplot as plt import matplotlib.font_manager as font_managerdef plot_df(df, x, y, title"", xlabelDate,…