C++赋值运算符函数与拷贝构造函数

一.赋值运算符函数与拷贝构造函数区别 

C++拷贝赋值运算符与拷贝构造函数的区别:

        首先,拷贝构造函数是用于创建一个新对象作为现有对象的副本的构造函数。

典型的拷贝构造函数如下:

        class_name(const class_name &old_obj);
其中,`old_obj`是一个源对象的引用,我们将从其中复制数据。
        另一方面,赋值运算构造函数是用于已存在的对象的。当我们要将一个对象的值赋予另一个已经存在的对象时,我们就会使用赋值构造函数。

通常,在操作符“=”重载中实现。例如:

        class_name& operator=(const class_name &old_obj);
在这里,`old_obj`是我们要从中获取值的源对象。
总结一下:

如果对象未初始化需要创建新的对象,那么拷贝构造函数会被调用;

如果对象已经初始化,并且需要被赋予新的值,那么赋值构造函数会被调用。

二.代码示例

//首先是一个简单的类`MyClass`,它包括拷贝构造函数和拷贝赋值运算符的定义:
#include <iostream>
using namespace std;

class MyClass
{
public:
    int x;
    int y;

    // 默认构造函数
    MyClass() {
        x = 0;
        y = 0;
    }

    // 带参数的构造函数
    MyClass(int a, int b) {
        x = a;
        y = b;
    }

    // 拷贝构造函数
    MyClass(const MyClass& other) {
        x = other.x;
        y = other.y;
        std::cout << "拷贝构造函数调用" << std::endl;
    }

    // 赋值构造函数
    MyClass& operator=(const MyClass& other) {
        if (this == &other) {
            return *this;
        }
        x = other.x;
        y = other.y;
        std::cout << "拷贝赋值运算符调用" << std::endl;
        return *this;
    }
};

int main()
{
    MyClass a(5,6);        // 调用参数化构造函数
    MyClass b = a;         // 调用拷贝构造函数
    MyClass c;             // 调用默认构造函数
    c = a;                 // 调用拷贝赋值运算符
    return 0;
}

运行结果:

 

在这个例子中,`MyClass` 具有一个整型成员数据,当创建类的新实例时,拷贝构造函数被调用(比如`MyClass b = a;`),而当一个已经存在的实例被赋予另一个对象的值时,拷贝赋值运算符被调用(比如`c = a;`)。

注意,在`MyClass`类中,我们添加了输出语句来指明哪个函数被调用。这个例子清晰地展示了在不同情况下这两个操作的区别。

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

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

相关文章

Spring Boot简介及案例

文章目录 Spring Boot简介以下是一个简单的 Spring Boot Web 应用实例**步骤 1&#xff1a;创建 Spring Boot 项目****步骤 2&#xff1a;编写 RESTful 控制器****步骤 3&#xff1a;配置主类****步骤 4&#xff1a;运行并测试应用** Spring Boot简介 Spring Boot 是一个用于简…

【独立开发前线】Vol.27 为什么独立开发者需要一个网站?

现在很多内容创造者都把主要平台放在了第三方平台上&#xff0c;包括像知乎、B站、头条等等&#xff0c;但即使在2024年&#xff0c;我依然建议你做一个完全属于你的网站。 为什么呢&#xff1f; 你有没有在微信或知乎看到过这种拦截页面&#xff1f; 你花了好大的精力写了一…

Day58:WEB攻防-RCE代码命令执行过滤绕过异或无字符无回显方案黑白盒挖掘

目录 RCE & 代码执行 & 命令执行 RCE-利用&绕过&异或&回显 关键字过滤 - 过滤 flag 过滤执行命令&#xff08;如cat tac等&#xff09; 过滤执行空格 无回显利用 演示案例—白盒-CTF-RCE代码命令执行 29-通配符 30-取代函数&通配符&管道符…

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记14:PWM捕获

系列文章目录 嵌入式|蓝桥杯STM32G431&#xff08;HAL库开发&#xff09;——CT117E学习笔记01&#xff1a;赛事介绍与硬件平台 嵌入式|蓝桥杯STM32G431&#xff08;HAL库开发&#xff09;——CT117E学习笔记02&#xff1a;开发环境安装 嵌入式|蓝桥杯STM32G431&#xff08;…

微信小程序开发【从入门到精通】——页面事件

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

MS Edge浏览器坏了?网页播放视频的速度不对

前言 小白是MS Edge浏览器的重度用户。电脑上必须有的两个浏览器&#xff1a;Google Chrome和Microsoft Edge。 前段时间小白在使用MS Edge的时候出了问题&#xff1a;播放视频或者音频的时候总是被莫名其妙加速或者减速&#xff0c;类似于播放视频时候的0.5x或者2.0x。 当时…

舒适的劳保鞋,是工友不可或缺的保障!

劳保鞋&#xff0c;自诞生以来&#xff0c;就承担着保护工作人员足部免受于伤害的重任。在现代工业社会里&#xff0c;劳保鞋作为一种常见的劳保防护用品&#xff0c;被广泛用于各行各业。从实验室到车间再到工厂等&#xff0c;只要是作业现场大部分都会用到对应的劳保鞋。工作…

阿里云2核4G服务器租用价格30元、165元和199元1年

阿里云2核4G服务器租用优惠价格&#xff0c;轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图&#xff1a; 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…

国内好用的chatGPT和AI绘图工具

分享一个比较好用的AI 分享一个比较好用的AI&#xff0c;只是需要开通会员&#xff0c;目前官网的价格是&#xff1a;298&#xff0c;开通之后可以使用chatgpt4、AI绘画、图片融合等等&#xff01;不开通的话是可以免费使用15次的&#xff0c;下面是一些介绍图片&#xff01;链…

使用Leaflet.rotatedMaker进行航班飞行航向模拟的实践

目录 前言 一、Leaflet的不足 1、方向插件 2、方向控制脚本说明 二、实时航向可视化实现 1、创建主体框架 2、飞机展示 3、位置和方位模拟 三、成果及分析 1、成果展示 2、方向绑定解读 总结 前言 众所周知&#xff0c;物体在空间中的运动&#xff08;比如飞行、跑步…

基于微信小程序的考研交流平台的设计与实现

3 系统需求分析与设计 3.1 系统需求分析 本系统基于微信小程序&#xff0c;实现教学互动软件系统是本文的目标&#xff0c;主要涉及到的系统角色分为学生、教师、管理员。系统角色主要有管理员&#xff0c;普通用户两种角色构成。 普通用户有如下几个核心需求&#xff1a; …

JUC:synchronized优化——锁的升级过程(偏向锁->轻量级锁->重量级锁)以及内部实现原理

文章目录 锁的类型轻量级锁重量级锁自旋优化偏向锁偏向锁的细节偏向锁的撤销批量重偏向批量撤销锁消除 锁的类型 重量级锁、轻量级锁、偏向锁。 加锁过程&#xff1a;偏向->轻量级->重量级 轻量级锁 轻量级锁的使用场景&#xff1a;如果一个对象虽然有多线程要加锁&am…

Django详细教程(一)

文章目录 一、安装Django二、创建项目1.终端创建项目2.Pycharm创建项目&#xff08;专业版才可以&#xff09;3.默认文件介绍 三、创建app1.app介绍2.默认文件介绍 四、快速上手1.写一个网页步骤1&#xff1a;注册app 【settings.py】步骤2&#xff1a;编写URL和视图函数对应关…

sort函数对vector一维或者二维数组排序

目录 sort对一维数组排序 1、sort对一位数组升序排序 2、sort对一维数组降序排序 sort对二维数组排序 1、sort默认对横坐标进行升序排序&#xff0c;如下&#xff1a; 2、使用自定义排序对纵坐标进行升序排序&#xff1a; 额外知识&#xff1a; 对横坐标进行降序排列,当…

【全栈小5】我的创作纪念日

目录 前言机缘收获粉丝和原创个人成就六边形战士 回顾文章原代码代码优化 憧憬 前言 全栈小5 &#xff0c;有幸再次遇见你&#xff1a; 还记得 2019 年 03 月 29 日吗&#xff1f; 你撰写了第 1 篇技术博客&#xff1a; 《前端 - 仿动态效果 - 展开信息图标》 在这平凡的一天&…

CSS(三)---【盒子模型、边框、外边距合并】

零.前言 本篇主要介绍CSS中最重要的一种概念模型&#xff1a;“盒子模型”。 关于CSS的更多内容&#xff0c;可以查看作者之前的文章&#xff1a; CSS(一)---【CSS简介、导入方式、八种选择器、优先级】-CSDN博客 CSS(二)---【常见属性、复合属性使用】-CSDN博客 一.盒子模…

基于AI网关的光伏电站在线监测方案

光伏电站作为利用太阳能的重要方式&#xff0c;凭借其环保、高效和可持续性的优势&#xff0c;在全球范围内得到广泛应用。然而&#xff0c;光伏电站的运营和维护也面临着诸多难点和痛点。在这一背景下&#xff0c;AI智能网关的应用为光伏电站的运营和维护带来了新的突破。 光伏…

天梯算法Day3整理

浮点数解析 炸鱼题掠过 冲突值 题面 解析 方法一 —— 并查集 按照边值排序&#xff0c;然后按边值从大到小遍历&#xff0c;通过并查集判断能否将所有点无冲突地归于两个集合。在判断时&#xff0c;若有两个点不得不产生冲突&#xff0c;则输出这两个点之间的边值并结束。…

linux 网卡配置 vlan/bond/bridge/macvlan/ipvlan/macvtap 模式

linux 网卡模式 linux网卡支持非vlan模式、vlan模式、bond模式、bridge模式&#xff0c;macvlan模式、ipvlan模式等&#xff0c;下面介绍交换机端及服务器端配置示例。 前置要求&#xff1a; 准备一台物理交换机&#xff0c;以 H3C S5130 三层交换机为例准备一台物理服务器&…

变分信息瓶颈

变分信息瓶颈和互信息的定义 1 变分信息瓶颈 定义&#xff1a;变分信息瓶颈&#xff08;Variational Information Bottleneck&#xff09;是一种用于学习数据表示的方法&#xff0c;它旨在通过最小化输入和表示之间的互信息来实现数据的压缩和表示学习。这种方法通常用于无监…