等号操作符重载

重载等号(==)使用陷阱 使用重载的等号(==)操作符时,需要注意比较对象是指针还是引用,注意不要使用错误,否则将无法正确调用重载的操作符。具体使用过程如下: 阅读详情

当是涉及到深拷贝是,一种解决方式就是自己写构造函数处理深拷贝,另一种方式就是等号操作符重载

等号操作符重载实例:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
/*单目运算符重载*/
class eqPtor{
	
private:
	char *str;
	int str_length;
public:
	
	eqPtor(char* m_str, int m_length)
	{
		this->str_length = m_length;
		this->str = new char[str_length+1];
		strcpy(this->str, m_str);
	}
	eqPtor(eqPtor &opp)
	{
		this->str_length =opp.str_length;
		this->str = new char[str_length + 1];
		strcpy(this->str, opp.str);
	}

	/*等号操作符重载*/
#if 0    /*等号操作符重载方式1*/
	void operator=(eqPtor &opp1)
	{
		/*首先判断当指针是否分配内存,如果是则先释放后分配*/
		if (this->str != NULL)
		{
			delete this->str;
			this->str_length = 0;
		}
		this->str_length = opp1.str_length;
		this->str = new char[str_length + 1];
		strcpy(this->str, opp1.str);
	}
#endif 
	/*等号操作符重载方式2*/
	eqPtor operator=(eqPtor &opp1)
	{
		/*首先判断当指针是否分配内存,如果是则先释放后分配*/
		if (this->str != NULL)
		{
			delete this->str;
			this->str_length = 0;
		}
		this->str_length = opp1.str_length;
		this->str = new char[str_length + 1];
		strcpy(this->str, opp1.str);
		return *this;
	}




	void print()
	{
		cout << "    :" << this->str << endl;
	}
	~eqPtor()
	{
		if (this->str != NULL)
		{
			delete this->str;
			this->str_length = 0;
		}
	}
	
};

int main()
{
	{
		
		eqPtor opp1("libin", sizeof("libin"));
		eqPtor opp2("yiyierer", sizeof("yiyierer"));
		eqPtor opp3("busanbusi", sizeof("busanbusi"));
		//eqPtor opp2=opp1;
		opp1 = opp2;//这样是调用等号操作符,由于这里没有对等好操作符进行重载,所以如果之际使用就会出现错误
		//opp1 = opp2=opp3   这种运算方式用等号操作符重载方式一不可行 应为等号操作符是从有往左结合的,所,opp2=opp3的运算结果是void ,相当于opp1=void不可行
		opp1 = opp2 = opp3;/*这里将等号操作修改以后就可以使用这种操作*/
		opp1.print();
	}
	system("pause");
	return 0;
}


编程中的等号操作符使用陷阱与实例解析 对于自定义类型,比较实现可以分为几个层次:基本数据类型的比较通常比较它们的值。指针类型的比较可以比较指针本身的值,也可以比较指针指向的数据。对于类对象,比较可以基于对象的状态,即对象成员变量的值。例如,对于一个包含多个成员变量的类,operator==可能需要递归地比较每个成员:public:int a;double b;MyClass* c;在上面的例子中,我们实现了一个简单的MyClass对象比较函数。注意我们如何处理指针c。 阅读详情

相关推荐

小土堆学习笔记1:Dataset类代码实践

上一页中反复提到“类”,这究竟是什么东西?按我的理解(肯定不准确也不正式),class类就是某一个东西的共性,而且是等待被确认的共性。比如每台手机都有它自己的品牌、框架、价格等等属性,class类正是这些尚不确定的属性;而一旦确认了这些属性,就能够确认这到底是一台什么型号什么状态的手机,在确认了全部属性后就知道,这是一台Apple 16 Pro Max。抽象的不确定的共性就是类,具体的确定的个性就是示例。这个共性可以被用于多个编程目的,只不过某一个具体的编程行为还有它自己的独特性。

qq_40525602的博客 1626

详细讲述C++各种运算符重载

1、等号运算符重载 我们需要注意的是,当我们不写等号运算符重载的时候,系统会默认生成浅赋值形式等号运算符重载,所谓的浅赋值就是将目标对象的成员属性直接赋值给当前对象(可以参考深拷贝和浅拷贝,在我的“C++——拷贝构造函数详解”这篇文章中有详细讲解)。 Object { public: //其他的构造函数、析构函数不是本篇文章重点,省略。 void operator=(const Object& obj) { this->value=obj.value;

仟各的博客 3105

深度学习暑期科研项目(两个月发EI论文)

对本科生而言,越早接触系统的科研训练开始上手科研项目,就越能在未来的升学求职中占据很大的优势。暑假是提升个人简历、丰富科研经历的最佳时期!哈尔滨工业大学博士师兄也会在8月1日开始带大家上手科研项目,并撰写发表EI会议论文。

Magnolia_He的博客 1444

【C++】运算符重载 ⑨ ( 等号 = 运算符重载 | 调用默认浅拷贝构造函数的情况分析 | 等号 = 运算符重载 与 拷贝构造函数 各自使用场景 | 等号 = 操作符重载步骤 )

一、等号 = 运算符重载 1、调用默认浅拷贝构造函数的情况分析 2、等号 = 运算符重载 与 拷贝构造函数 各自使用场景 3、= 操作符重载步骤 二、完整代码示例

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2102

基于MicroPython的ESP32与微信小程序MQTT通信实战

本文详细介绍了基于MicroPython的ESP32与微信小程序通过MQTT协议实现远程控制的完整实战方案。项目利用巴法云作为免费MQTT服务器,提供了从设备端编程、小程序开发到通信调试的全流程指南,帮助开发者快速构建低成本、易上手的物联网应用,如智能开关、传感器监控等。

week9的博客 634

Linux PE vs WinPE:为何麒麟系统修复需要专属工具?

本文探讨了Linux PE与WinPE在修复国产麒麟系统时的关键差异,强调了专属工具的必要性。通过分析文件系统兼容性、引导修复、硬件适配和安全合规等方面,揭示了通用PE工具的局限性,并提供了构建专属修复工具链的实用方案,确保系统维护的高效与安全。

weixin_29290863的博客 1063

等号运算符重载——C++

C++中=为浅拷贝,在实现类时可以赋值操作,但是delete的时候会存在重复释放内存的错误。所以,需要用到等号运算符重载。 代码实现如下: #include<iostream> using namespace std; //等号运算符重载,深拷贝 class person { public: int *m_age; person(int age) { m_age = new int (age); } ~person() { if (m_age != NULL)

qxqsunshine的博客 7234

OrCAD Capture CIS 17.4 原理图绘制

OrCAD Capture CIS 17.4 原理图绘制

qq_38960013的博客 7637

关于等号运算符重载的解读

等号运算符重载 文章目录等号运算符重载关于本篇为什么要重载?重载等号的问题重载等号应该定义在何处?重载等号的返回类型是什么?总结参考文献Write the code, change the world! 关于本篇 C++中说到重载,可能我们会想到函数重载,除此之外还有一个很重要的就是运算符重载,那么这一篇博客主要讲的是等号运算符重载,主要也是我在Coding过程中出现了一些问题,在查阅相关的资料...

The blog of desperate 4131

搞定ESD(二):ESD干扰机理分析

大家好,我是记得诚。上文介绍了ESD的基本知识,对ESD的测试标准进行了解析,包括静电发生器的介绍,实验布置要求,静电放电实验的实施及判定等内容。本文主要介绍ESD的干扰机理。

记得诚 4301

【SOUND】Linux音频子系统ASoC的驱动框架总分析

ALSA系统在芯片(ASoC)层的总体项目目标是为嵌入式芯片处理器(例如PXA2XX,AU1X00,IMX等)和便携式音频编解码器提供更好的ALSA支持。 在进入ASoC子系统之前,内核对SoC音频有一些支持,但是它有一些局限性:ASoC层旨在解决这些问题并提供以下内容特征 :为了实现这一切,ASoC基本上将嵌入式音频系统分为多个可重复使用的组件驱动程序:另外,这里提下OSS(Open Sound System)这个基本被弃用的音频框架。 可以参考Linux OSS架构声卡驱动框架 2.3 ASoC重要

wang 恒 的博客 1783

【C++】运算符重载案例 - 字符串类 ② ( 重载 等号 = 运算符 | 重载 数组下标 [] 操作符 | 完整代码示例 )

一、重载 等号 = 运算符 1、等号 = 运算符 与 拷贝构造函数 2、重载 等号 = 运算符 - 右操作数为 String 对象 3、不同的右操作数对应的 重载运算符函数 4、重载 等号 = 运算符 - 右操作数为 字符串指针 二、重载 下标 [] 运算符 三、完整代码示例 1、String.h 类头文件 2、String.cpp 类实现 3、Test.cpp 测试类 4、执行结果

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2242

深度解读 ABAP CDS View 中的 @Analytics.dataCategory: #FACT 注解

注解在 ABAP CDS View 中具有重要意义。它不仅定义了当前视图在数据模型中的角色,还为后续的分析和报告奠定了基础。在实际开发中,通过合理使用这一注解,可以显著提升数据模型的可用性和系统性能。无论是简单的 KPI 展示还是复杂的多维分析,这一注解都能发挥关键作用。

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

C++等号操作符重载错误

今天在帮同事看一段代码时发现这么一个问题,虽然不大,但是困惑了不少时间,知道在优快云论坛上找到答案,特此记录下来大家都知道,C++支持操作符重载,操作符重载可以有两种实现方式:成员函数和全局函数但是,我今天碰到的问题就是,我实现了一个等号操作符用来操作自定义类,编译的时候,提示void operator=(const A&amp; ,const A&amp;) must be a nonstat...

CHALLENG_EVERYTHING的专栏 3406

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

c++ 重载等号操作符例子

下面是一个重载等号操作符的例子: #include <iostream> class MyClass { public: MyClass(int x) : x_(x) {} int GetX() const { return x_; } void SetX(int x) { x_ = x; } // 重载等号操作符 MyClass&amp; oper...

weixin_35754962的博客 160

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

第四天之运算符重载提高_重载等号操作符

重载等号操作符实现深拷贝 难点: 1)先释放掉旧的内存 2)返回一个引用,实现链式编程 #define _CRT_SECURE_NO_WARNINGS #include "iostream" using namespace std; class Name { public: Name(const char *pname) { m_len = strlen(pname) + 1; ...

qq_42230338的博客 485

OV9734 DATASHEET,完整规格书

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

c++解决对象浅拷贝问题之(重载等号操作符和手工编写copy构造函数)

C++编译器提供的 默认的copy构造函数 属于浅拷贝(所以需要重写copy构造函数) C++编译器提供的 等号操作= 也属浅拷贝(所以需要重载等号操作符) 重载 等号操作=三步骤: 1.先释放接收者旧的内存 2.根据传递者的内存大小分配接收者的内存大小 3.将传递者的数据拷贝给接收者 #define _CRT_SECURE_NO_W...

weixin_43293737的博客 531

重载等号操作符

传智扫地僧课程学习笔记。 类对象, 使用=操作符,进行赋值的时候, 也属于一种浅拷贝,并且还可能造成内存泄露, 所以我们需要重载,我们所写类的等号操作符, Name& operator=(Name &obj1) { //先释放旧的内存 if (this->m_p != NULL) { delete[] m_p; m_len = 0; } //2

1 780

c++操作符重载

容器对象list和vector使用时遇到find函数报错,那么问题的最终解决方案在操作符重载,这里就顺便将操作符重载的相关内容都详细介绍一遍,并给出实例代码

河西~石头 1698

C++第二章 重载等号操作符的深拷贝问题

1

qq_33229537的博客 601

C++(三十六) — 等号操作符重载、&&,||不可重载

1、等号操作符重载,实现深拷贝 //等号运算符重载 // obj3=obj1;//原始的是浅拷贝,现在要重载为深拷贝 Name& operator=(Name &obj1) { //1、先释放旧的内存 if (this->m_p != nullptr) { delete[] m_p; m_...

dbsggal90047018的博客 518

复制构造函数与等号的操作符重载

//头文件 #include<iostream> #ifndefSTRNGBAD_H_ #defineSTRNGBAD_H_ classStringBad { private: char*str; size_tlen; staticintnum_strings; public: StringBad(con...

anhai6033的博客 161

对于std::vector的等号重载操作符的理解

针对cppreference的理解 重新整理了一下。

weixin_45579645的博客 846
上一篇: 一元运算符操作符重载
下一篇: 数组下标重载
LiBin1103
博客等级 码龄9年 38粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值