重载赋值运算符与拷贝构造函数的区别

基于STM32的智能浇花系统毕业设计(全部资料) 摘要:本文设计了一种基于STM32单片机的智能浇花系统,集成了环境温湿度检测、土壤温湿度监测、LCD显示、Wi-Fi联网及手机APP远程控制等功能。系统通过传感器实时采集环境参数,自动控制水泵工作实现智能灌溉,同时支持用户通过手机APP远程监控和调节。论文详细阐述了硬件选型、软件设计及系统测试过程,验证了系统的稳定性和实用性。该设计为家庭园艺提供了智能化解决方案,具有节水高效、操作便捷等特点。关键词:STM32;智能灌溉;远程控制;环境监测;Wi-Fi通信。 阅读详情

重载赋值运算符与拷贝构造函数的区别

//比较运算符重载函数与拷贝构造函数的区别
#include <iostream>
using namespace std;
#include <cstring>
class Namelist
{
    char *name;
    public:
        Namelist (char *p)//带参数的构造函数
        {
         name= new char[strlen(p)+1];
         if (name!=0) strcpy(name,p);
        }
        Namelist(){ };//缺省构造函数
        Namelist(Namelist&);//拷贝构造函数
        Namelist& operator=(char *p );
        Namelist& operator=(  Namelist& );    
        void display(){cout<<name<<endl;}
        ~ Namelist ()
        {
         delete [] name ;
        }
};
Namelist::Namelist(Namelist& a)//定义拷贝构造函数
{
    name= new char[strlen(a.name)+1];
    if (name!=0) strcpy(name,a.name);
}
Namelist& Namelist::operator=( char *p)//
//第一个重载赋值运算符,完成用常量给对象赋值
{
    name= new char[strlen(p)+1];
    if (name!=0) strcpy(name,p);
    return *this;
}    
Namelist& Namelist::operator=(  Namelist& a)
//第二个重载赋值运算符,完成类对象之间的赋值
{
    if (this!=&a)//首先查看是否赋值给自身,如果不是
    {
        delete[] name;//那么重新给它分配所需空间并拷贝字符串,保证目标对象和原对象各自拥有自己的拷贝字符串,从而完成深拷贝

        name=new char[strlen(a.name)+1];
        if (name!=0) strcpy(name,a.name);
    }
    return *this;
}    
int main()
{
    Namelist n1("first object"),n2("second object");//调用带参数的构造函数
    Namelist n3;//缺省构造函数
    cout<<"赋值前的数据:"<<endl;
    n1.display();
    n2.display();
    n3="third object";//调用第一个重载赋值运算符函数
    n2=n1;//调用第二个重载赋值运算符函数
    Namelist n4(n2);//调用拷贝构造函数函数
    Namelist n5=n3;//调用拷贝构造函数函数
    Namelist n6="sixth object";//调用带参数的构造函数等同于()的方法
    cout<<"赋值后的数据:"<<endl;
    n1.display();
    n2.display();
    n3.display();
    n4.display();
    n5.display();
    return 0;
}
总结:拷贝构造函数发生在下面三种情况下:
在C++中,下面三种对象需要调用拷贝构造函数:
1) 一个对象以值传递的方式传入函数体;
2) 一个对象以值传递的方式从函数返回;
3) 一个对象需要通过另外一个对象进行初始化;
深拷贝和浅拷贝的定义可以简单理解成:如果一个类拥有资源(堆,或者是其它系统资源),当这个类的对象发生复制过程的时候,这个过程就可以叫做深拷贝,反之对象存在资源但复制过程并未复制资源的情况视为浅拷贝。 
OV9734 DATASHEET,完整规格书 OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等 立即下载

相关推荐

深度学习与神经网络有什么区别

人工神经网络(ArtificialNeuralNetwork,即ANN)是从信息处理角度对人脑神经元网络进行抽象,是20世纪80年代以来人工智能领域兴起的研究热点,其本质是一种运算模型,由大量的节点(或称神经元)之间相互联接构成,在模式识别、智能机器人、自动控制、生物、医学、经济等领域已成功地解决了许多现代计算机难以解决的实际问题,表现出了良好的智能特性。...

super67269的博客 8488

c++ 赋值运算符重载和拷贝构造函数区别以及不写时可能引发的问题

一、赋值运算符重载和拷贝构造函数区别 #include <iostream> using namespace std; class Element { private: int *m_pdata; public: Element(int data) { cout << "构造函数" << endl; m_pdata = new int(data...

struggle6688的专栏 772

基于Xilinx_IBERT的光纤接口眼图测试

基于Xilinx_IBERT的光纤接口眼图测试

Coca_Tian的博客 1万+

复制构造函数和重载赋值运算符的区别[原创]

复制构造函数和重载赋值运算符的区别: 1. 调用情况         1. 复制构造函数                    1. 传递参数                    2. 赋值给新建的变量                    3. 赋值给存在的变量         2. 赋值运算符重载                    1. 赋值给存在的变量 2. 调用顺序

陈德贵的博客 379

Ubuntu中 vsftpd 的安装与配置 (详细介绍)

简介 vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux, BSD, Solaris, HP-UX 以及 IRIX 上面。它支持很多其他的 FTP 服务器不支持的特征。 vsftpd是 UNIX 操作系统中的一个开源的、免费的 FTP 服务软件。具有以下特点: 安全性高 轻小易用 支持系统用户匿名用户和虚拟用户的权限验证和相关操作 安装步骤如下: 1.将此命令复制到终端 sudo apt-get install vsftpd 2.安装完成后启动VSFTP

qq_43299421的博客 1万+

应用软件——Altium Designer 19 Gerber/坐标文件

如何输出Gerber文件 步骤如下: 打开需要输出的PCB文件 2. 设置原点坐标 3. 打开Gerber Files 选项,File–>Fabrication Opuputs–>Gerber Files。 4. General参数设置。 用于指定输出Gerber文件中使用的单位(Units)和格式(Format)。单位可以是公制(Millimeters)和英制(Inches);格式栏中2:3,2:4,2:5代表文件中使用的不同数据精度,其中2:3表示数据含2位整数3位小数;相应的,另外两个分

染血黑兔的博客 7203

拷贝构造函数和重载运算符的理解

文章目录1.拷贝构造函数和构造函数的区别2.拷贝构造函数在什么情况下会被调用3.重载运算符的理解 1.拷贝构造函数和构造函数的区别 2.拷贝构造函数在什么情况下会被调用 3.重载运算符的理解 ...

tjh1998的博客 1330

冒险岛脚本函数大全:cm.sendYesNo和cm.warp的20个实战用法

本文深入解析了冒险岛脚本中cm.sendYesNo和cm.warp两个核心函数的20个实战应用场景。从基础的确认对话框交互、条件判断,到复杂的装备强化系统、动态传送与副本入口逻辑,文章通过大量代码示例展示了如何组合运用这两个函数,实现从简单NPC到复杂任务系统的进阶脚本开发,并分享了状态管理、错误处理与性能优化等最佳实践。

t4y5u6i7o的博客 1061

C++ =运算符重载和构造函数重载的区分

构造函数重载 //例子来源于友学网1533 class Complex{ public: Complex(double re, double im); Complex(double re); //Complex operator=(double re); }; Complex::Complex(double re, double im){ _re = re; ...

weixin_43906717的博客 802

4D Gaussian Splatting for Real-Time Dynamic Scene Rendering-4DGS阅读笔记

为了实现实时动态场景渲染,同时还能具备较高的训练和存储效率,作者提出了四维高斯溅射(4D-GS)方法,将其作为动态场景的一种整体表示方式,而不是对每个单独的帧应用三维高斯溅射(3D-GS)方法。在 4D-GS 中,提出了一种新颖的显式表示方法,它同时包含三维高斯模型和四维神经体素。受 HexPlane 启发,提出了一种分解的神经体素编码算法,以高效地从四维神经体素构建高斯特征,然后应用一个轻量级多层感知器(MLP)来预测在新时间戳下的高斯变形。

2403_85515624的博客 2343

Flutter版本升级踩坑实录:从3.27到3.35,我们是如何修复Impeller引擎导致的花屏问题的?

本文详细记录了团队在Flutter版本升级过程中遇到的Impeller引擎导致的花屏问题及解决方案。从问题诊断到最终升级至稳定版3.35,文章分享了排查步骤、升级策略和性能对比数据,为开发者提供了实用的参考经验。

weixin_26854555的博客 506

【C++初阶】简析拷贝构造、赋值运算符重载

讲讲拷贝构造和赋值运算符重载的知识

Captain_ldx的博客 2211

MATLAB 车牌识别系统

车牌识别系统利用计算机视觉和图像处理技术,自动识别车辆牌照上的字符信息。本系统基于 MATLAB 实现车牌识别,包括图像预处理、车牌定位、字符分割、字符识别等模块。车牌识别系统是实现智能交通和公共安全的重要手段,具有广泛的应用前景。MATLAB 提供了丰富的工具和函数,可以方便地进行算法仿真和系统开发。

走向CTO的路上... 736

解释 C++ 中的拷贝构造函数和赋值运算符重载,并指出它们之间的区别。

两者都是实现对象拷贝的重要方式,在 C++ 中经常被用到。综上所述,拷贝构造函数和赋值运算符重载都是对象拷贝的重要方式,但在实现和使用上有一些细微的差别,需要根据具体的情况选择合适的方式来实现对象的拷贝操作。赋值运算符重载在对象已经存在时调用,用于将一个对象的值赋给另一个已经存在的对象。赋值运算符重载在对象已经存在时调用,用于将一个对象的值赋给另一个已经存在的对象。赋值运算符重载的参数是一个对象的引用,用于赋值给另一个已经存在的对象。赋值运算符重载的参数是一个对象的引用,用于赋值给另一个已经存在的对象。

qiuyehuanghun的博客 1388

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

c++中拷贝构造函数与赋值运算符重载有哪些区别

在C++中,拷贝构造函数和赋值运算符重载(assignment operator overload)都是用于处理对象之间的复制操作,但它们之间存在一些重要的区别。这个运算符通常用于将一个对象的值赋给另一个已经存在的对象。它返回一个对调用对象的引用,这允许连续赋值操作。拷贝构造函数是一种特殊的构造函数,它用于创建一个新的对象作为现有对象的副本。是对现有对象的引用。可以被重载以定义自定义类型的对象赋值操作。

m0_75032658的博客 606

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

拷贝构造函数c语言,拷贝构造函数和重载赋值运算符的区别

其实自己对这两个区别是一直不怎么弄懂的,而且也曾经问过别人是怎么一个区别,不过人家说叫我看一下书,可惜的是最后还是没有弄懂。一直到昨天,考C++的时候,我似乎突然觉得明白了什么,于是就构思了一个测试的程序来看一下自己的猜想是否正确,现在实现以下,觉得已经能够明白了他们之间的却别了。记得当初我是这么问别人的:有了拷贝构造函数,就可以b =a;也没有错了,那么还要重载赋值运算符干嘛?两个有什么区别吗?...

weixin_39818264的博客 486

拷贝构造函数和赋值运算符重载的区别

拷贝构造函数是用一个已存在的对象去构造一个不存在的对象(拷贝构造函数毕竟还是构造函数嘛),也就是初始化一个对象。而赋值运算符重载函数是用一个存在的对象去给另一个已存在并初始化过(即已经过构造函数的初始化了)的对象进行赋值。 它们定义上的区别,楼上的已经说过了。 比如:String s1("hello"),s2=s1;//拷贝构造函数 Sring s1("hello"),s2; s1=s2...

weixin_30580341的博客 345

C++ 拷贝构造函数和重载赋值运算符的区别

拷贝构造函数 首先从构造函数说起,在C++面向对象的设计中,每一个对象代表一个抽象集合的实体,此时每一个实体在当前运行的进程中是需要对应的内存空间,即对象存在则有空间。为此,C++引入构造函数来实例化对象,并让编译器为该对象向操作系统申请对应的空间,从而能够存在于操作系统之中。 拷贝构造函数则是为了将老对象的数据成员一一赋值给新的对象数据成员的一种构造函数,即拷贝构造函数的结果和构造函数一致,都是...

天行健,地势坤 3994

拷贝构造函数与赋值运算符重载的区别

#include<iostream> using namespace std;class Test { public: Test() { ctor_count++; cout<<"ctor "<<endl; } Test(const Test & r) { ctor_count++; cout<<

生如蚁,美如神 1518

运算符重载——拷贝构造函数与赋值运算符的区别、如何实现赋值运算符的深拷贝

写在前面 1)C++的编译器会默认给一个类提供4个函数 默认构造函数(无参、函数体为空) 默认析构函数(无参、函数体为空) 默认拷贝函数(浅拷贝,对属性仅进行值拷贝) 赋值运算符operator=(对属性进行值拷贝) 我们可以看见类的默认拷贝构造函数和赋值运算符,都是对属性进行值拷贝,但是它们之间有什么区别吗?在什么情况下会调用它们?下面会详细介绍. 2)本篇涉及内容: 拷贝构造函数和赋值运算符的区别 如何实现赋值运算符的深拷贝 拷贝构造函数和赋值运算符 从上面代码我们可以知道: 默认的拷贝构造

k909397116的博客 1278

[ZZ]重载赋值运算符与拷贝构造函数的区别

<br />比较运算符重载函数与拷贝构造函数的区别<br /> <br />原文链接:http://blog.sina.com.cn/s/blog_4c98b9600100api4.html<br />#include <iostream><br /> using namespace std;<br /> #include <cstring><br /> class Namelist<br /> {   char *name;<br />     public:<br />        

砚的专栏 919

Cpp--拷贝构造函数与赋值运算符重载函数的区别与使用

拷贝函数是用在已存在对象(的各成员当前值)来创建一个相同的新对象(尚不存在,正在创建),自动调用所属类的拷贝构造函数:当说明新的类对象的同时要给他赋值另一个已存在的对象(的各成员的当前值);当对象作为函数的赋值参数而对函数进行调用要进行实参和形参结合时;当函数的返回值是类的对象而在执行被调函数的返回语句后)即在函数调用结束后返回到主调函数处时)。 赋值运算符重载函数要把一个已存在的对象(的各成员

samkieth 1176
上一篇: Windows与ARM平台的基于JRTPLIB的RTP通信
下一篇: vc6环境下编译live555库的环境配置方法
yaopingcs
博客等级 码龄18年 11粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值