C++复制构造函数和赋值符的区别

【C++基础知识】拷贝构造函数和拷贝赋值运算符 拷贝构造函数VS拷贝赋值运算符 阅读详情
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
using namespace std;
//  Copy Constructor
//using namespace std;
// Assign sign
class MyClass
{
public:
 MyClass();
 //
 MyClass(const MyClass &);
 //
 MyClass & operator = (const MyClass &);
 ~MyClass();
private:
};
MyClass::MyClass()
{
 std::cout << "Constructor of MyClass" << endl;
}
MyClass::MyClass(const MyClass &a)
{
 cout << "Copy constructor of MyClass" << endl;
}
MyClass & MyClass::operator=(const MyClass &a)
{
 cout << "Assign Function of MyClass" << endl;
 
 return *this;
}
MyClass::~MyClass()
{
}
int _tmain(int argc, _TCHAR* argv[])
{
 MyClass a;
 MyClass b(a);
 MyClass c = a;
 a = c;

 return 0;
}

  1. Constructor of MyClass
    Copy Constructor of MyClass
    Copy Constructor of MyClass
    Assign function of MyClass

    一切都是很显然的了。

  2. 复制构造函数与赋值操作符之间的区别
    复制构造函数又称拷贝构造函数,它与赋值操作符间的区别体现在以下几个方面
    1.从概念上区分:
    复制构造函数是构造函数,而赋值操作符属于操作符重载范畴,它通常是类的成员函数
    2.从原型上来区分:
    复制构造函数原型ClassType(const ClassType &);无返回值
    赋值操作符原型ClassType& operator=(const ClassType& );返回值为ClassType的引用,便于连续赋值操作
    3.从使用的场合来区分:
    复制构造函数用于产生对象,它用于以下几个地方:函数参数为类的值类型时、函数返回值为类类型时以及初始化语句,例如(示例了初始化语句,函数参数与函数返回值为类的值类型时较简单,这里没给出示例)
    ClassType a;         //
    ClassType b(a);     //调用复制构造函数
    ClassType c = a;    //调用复制构造函数
    而赋值操作符要求‘=’的左右对象均已存在,它的作用就是把‘=’右边的对象的值赋给左边的对象
    ClassType e;
    Class Type f;
    f = e;              //调用赋值操作符
    4.当类中含有指针成员时,两者的意义有很大区别
    复制构造函数需为指针变量分配内存空间,并将实参的值拷贝到其中;而赋值操作符它实现的功能仅仅是将‘=’号右边的值拷贝至左值,在左边对象内存不足时,先释放然后再申请。当然赋值操作符必须检测是否是自身赋值,若是则直接返回当前对象的引用而不进行赋值操作


C++ 赋值构造函数 拷贝构造函数是一种特殊的构造函数,用于用一个已存在的对象初始化同类型的新对象。函数名与类名相同;唯一参数为同类型对象的引用(通常加const修饰,避免意外修改源对象);无返回值。默认情况下,编译器会自动生成一个默认拷贝构造函数,其行为是 “逐个成员复制”(浅拷贝)。// 自定义拷贝构造函数// 复制成员变量cout << "调用拷贝构造函数" << endl;为解决指针成员的浅拷贝问题,需手动实现深拷贝。 阅读详情

相关推荐

赋值运算符和拷贝构造函数的区别及示例代码

在C++编程中,赋值运算符(Assignment Operator)和拷贝构造函数(Copy Constructor)是用于对象之间的复制操作的两个重要概念。变量,用于存储字符串的内容和长度。在拷贝构造函数的实现中,我们为新对象分配了新的内存,并将已存在对象的值复制到新对象中。它们在实现和使用上有一些区别,需要根据具体的需求选择合适的方式来实现对象之间的复制操作。它创建了一个新对象,并将已存在对象的值复制到新对象中。),然后释放了原有的内存资源,为目标对象分配新的内存,并将源对象的值复制到目标对象中。

DplaAnaconda的博客 175

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

拷贝构造函数和赋值运算符的行为比较相似,都是将一个对象的值复制给另一个对象,但是其结果却有些不同,拷贝构造函数使用传入对象的值生成一个新的对象的实例,而赋值运算符是将对象的值复制给一个已经存在的实例。这种区别从两者的名字也能轻易的分辨出来,拷贝构造函数也是一种构造函数,那么它的功能就是创建一个新的对象实例;赋值运算符是执行某种运算,将一个对象的值复制给另一个对象(已经存在的)。 调用的是拷贝构造函数还是赋值运算符,主要是看是否有新的对象实例产生,如果产生了新的对象实例,那调用的就是拷贝构造函数;如果没有,那

WJsuperrunner 1569

拆解一个800G光模块:手把手带你认识里面的MT插芯和光纤阵列(FA)

本文详细拆解了800G光模块中的关键组件MT插芯和光纤阵列(FA),揭示了并行光学技术如何实现高速数据传输。通过显微镜下的精密观察,展示了MT插芯的高精度构造和光纤阵列的连接奥秘,同时解析了高精度研磨工艺对光信号传输的重要性。这些微型组件是高速收发模块实现800Gbps带宽的核心技术。

weixin_30839881的博客 1549

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

拷贝构造函数和赋值运算符区别     (整理)一、拷贝构造,是一个的对象来初始化一边内存区域,这边内存区域就是你的新对象的内存区域赋值运算,对于一个已经被初始化的对象来进行operator=操作class   A;      A  a;   A  b=a;   //拷贝构造函数调用   //或   A  b(a);   //拷贝构造函数调用   //////////////////////

石榴的专栏 5834

OCC WebGL案例编译实战:从FreeType配置到静态库生成

本文详细记录了将OCC(Open CASCADE Technology)3D图形库编译为WebAssembly(Wasm)并在浏览器中通过WebGL渲染的实战过程。重点解决了FreeType库的交叉编译配置、OCC核心库的裁剪与静态库生成,以及WebGL样例项目的CMake改造等关键步骤,为开发者提供了从环境搭建到最终集成的完整指南。

weixin_28831461的博客 316

Win10插网线显示未识别网络的三种解决方法

本文介绍了三种解决Win10插网线显示未识别网络问题的方法:更新或重启网络设备驱动程序、重置Winsock目录、启用Network Setup Service服务。这些方法都是基于常见的网络问题和解决方案而设计的,适用于大多数Win10用户。如果你遇到了这一问题,可以按照上述步骤进行操作,相信一定能够找到解决问题的方法。需要注意的是,在进行任何操作之前,请务必备份重要数据以防万一。此外,如果你对计算机硬件或软件不熟悉,建议寻求专业人士的帮助以避免造成不必要的损失。

nntxthml的博客 6773

C++ Primer(第4版)-第3部分:类和数据抽象——学习笔记

C++ Primer(第4版)-第3部分:类和数据抽象 学习笔记

码熊之家 725

Claude Skills 深度讲解

阶段 1:Function Call(2023)├─ 大模型可以调用外部工具├─ 问题:缺乏对任务的深度理解└─ 局限:工具调用简单线性阶段 2:MCP 上下文工程(2024)├─ 大模型有了更丰富的上下文和工具├─ 问题:仍然需要手动编写复杂的 Prompt└─ 局限:每次对话都需要重新加载上下文阶段 3:Claude Skills(2025)├─ 大模型有了「能力模块」的概念├─ 可以动态加载、组合、执行专门的工作流├─ 真正实现了「知识的模块化和复用」

u013134676的博客 1464

C++拷贝构造函数和赋值运算符根本的不同

首先要说明的是,若用户没有定义,C++隐式声明一个拷贝构造函数和一个赋值运算符(完成按数据成员复制的动作)。二者很像,但是在下边这点上有很大的不同:拷贝构造函数是只在对象实例化时才会被调用,也就是说,在拷贝构造函数调用期间,这个对象处于一个未决状态(直到拷贝构造函数被成功调用),另外拷贝构造函数不返回任何值,void都没有。而赋值运算符则在一个现存的对象被赋予新的值时被调用,并且它有返回值。

u012861978的专栏 982

使用Qt和MX Component插件实现与菱PLC的通信

在本文中,我们介绍了如何使用Qt和MX Component插件实现与菱PLC的通信。我们首先安装和配置了MX Component插件,并在Qt项目中初始化和使用MX Component来连接、读取和写入PLC的数据。安装完成后,您需要在Qt项目中配置MX Component的路径,以便Qt可以找到所需的库文件。在本文中,我们将探讨如何使用Qt和MX Component插件来实现与菱PLC的通信。在主函数中,我们将初始化MX Component,并创建一个与PLC通信的示例。在上面的代码中,我们使用了。

TlScratch的博客 996

【网络安全 | 渗透工具】Githack工具安装及使用教程详析

本文仅分享Githack工具基本安装及使用相关知识不承担任何法律责任。Git是一个非常流行的开源分布式版本控制系统,它被广泛用于协同开发和代码管理。许多网站和应用程序都使用Git作为其代码管理系统,并将其部署到生产环境中以维护其代码库。然而,在配置不当的情况下,可能会导致.git文件夹被直接部署到线上环境中,这可能会导致Git泄露问题。可通过githack下载泄露的Git存储库,以获取包含未加密密码、凭据和敏感信息的站点代码库。使用githack下载Git存储库的方法有两种。本文仅分享。

等风来 3万+

C++类中的构造函数和赋值函数

构造函数主要包括:默认构造函数、带参构造函数、拷贝构造函数三种,且构造函数经常与赋值函数混淆,这里放在一起讲,便于区分。 首先初始化一个简单的类作为例子讲解: class A { public: A() { v = 1; printf("默认构造\n"); } A(int t) { v = t; printf("有参构造\n"); } A(const A& a) { th

qq_36721032的博客 1万+

手把手教你学Simulink——基于电机驱动系统的场景实例:永磁同步电机(PMSM)在电动汽车中的矢量控制仿真

随着全球对环境保护的关注增加,电动汽车(Electric Vehicle, EV)因其环保特性而受到广泛关注。永磁同步电机(Permanent Magnet Synchronous Motor, PMSM)由于其高效率、高功率密度和良好的动态响应性能,在电动汽车驱动系统中得到了广泛应用。矢量控制(Field-Oriented Control, FOC)是实现PMSM高性能控制的关键技术之一,它能够实现对电机转矩和磁场的独立控制,从而达到类似直流电机的控制效果。本文将详细介绍如何使用来构建一个。

MHD0815的博客 1万+

C++基础语法:复制构造函数,赋值构造函数及浅复制,深复制

"打牢基础,万事不愁" .C++的基础语法的学习。

jllws1的博客 899

以 Joule 驱动的生成式开发:把需求文档直接变成可运行的 SAP 应用

摘要:SAP BTP的AI助手Joule正在改变开发方式,支持从自然语言描述自动生成数据模型、服务、UI及测试代码。在SAP Business Application Studio中,Joule能根据业务需求生成结构化代码,并提供代码补全、重构、解释等功能。开发者需注意避免上传敏感数据,并对AI生成的代码进行人工审核。Joule特别针对ABAP开发进行了优化,提供符合SAP规范的代码建议,帮助迁移遗留系统。此外,它还能快速生成CAP项目原型,但所有AI生成内容都需经过严格测试验证。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 342

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

复制构造函数跟赋值构造函数的区别

1. 何时调用复制构造函数  复制构造函数用于将一个对象复制到新创建的对象中。也就是说,它用于初始化过程中,而不是常规的赋值过程中。类的复制构造函数原型通常如下:  class_name(const class_name&);  它接受一个指向类对象的常量引用作为参数。例如,String类的复制构造函数的原型如下:  String(const String&);  新建一个对象并将其初始化为同

天翼之城 6551

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: C++类成员冒号初始化以及构造函数内赋值
下一篇: Bit操作 和C++标准库BitSet
QQ_Fighting
博客等级 码龄11年 13粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值