条款12:复制对象时勿忘记其每个成分

目录

1、成员变量变化时,不要忘记拷贝构造和赋值重载

2.继承时不要忘记基类的对象

3.拷贝构造和赋值重载不要相互调用


1、成员变量变化时,不要忘记拷贝构造和赋值重载

好的面相对象的系统会将内部封装,只留下赋值重载,和拷贝构造对 对象进行拷贝。

class custorm
{
public:
	custorm(const custorm & c)
		:_name(c._name)
	{
		cout << "custorm(const custorm & c)" << endl;
	}

	custorm &operator=(const custorm &c)
	{
		cout << "custorm &operator=(const custorm &c)" << endl;
		_name = c._name;
		return *this;
	}

private:
	string _name;
};

当拷贝构造,赋值重载被调用时,会打印对应的信息。这时候一切都很都好。

直到Date的到来。

class custorm
{
public:
	custorm(const custorm & c)
		:_name(c._name)
	{
		cout << "custorm(const custorm & c)" << endl;
	}

	custorm &operator=(const custorm &c)
	{
		cout << "custorm &operator=(const custorm &c)" << endl;
		_name = c._name;
		return *this;
	}

private:
	string _name;
	Date _birthday;
};

这时候不要忘记修改拷贝构造和赋值重载,因为编译器不会对这种行为,发生任何的警告,但是拷贝构造和赋值重载已经是局部拷贝了。

2.继承时不要忘记基类的对象

相比上面,继承的时候才是最容易出问题的。

class PriorityCustorm : public custorm
{
public:
	PriorityCustorm()
	{}

	PriorityCustorm(const PriorityCustorm &pc)
		:_priority(pc._priority)
	{}

	PriorityCustorm& operator=(const PriorityCustorm & pc)
	{
		_priority = pc._priority;
		return *this;
	}
private:
	int _priority;
};

上述代码表面看着没啥问题,其实问题大了

直接把基类的对象给完全忘记了

拷贝构造:这个时候基类对象会自己调用没有实参的默认构造(没有默认构造编译不过)。

赋值重载:基类的部分会不变。

这才是正确的代码。

class PriorityCustorm : public custorm
{
public:
	PriorityCustorm()
	{}

	PriorityCustorm(const PriorityCustorm &pc)
		:custorm(pc)
		,_priority(pc._priority)
		
	{}

	PriorityCustorm& operator=(const PriorityCustorm & pc)
	{
		operator=(pc);
		_priority = pc._priority;
		return *this;
	}
private:
	int _priority;
};

3.拷贝构造和赋值重载不要相互调用

这两个东西的语法意义就是完全不同的。

拷贝构造:构造一个未初始化的对象。

赋值:对一个已经存在的对象进行赋值。

拷贝构造调用赋值就是对一个未初始化的对象进行赋值。

赋值调用拷贝构造就是对一个构造一个已经初始化对象。

狗屁不通,千万别这么用。

如果拷贝构造和赋值重载有重复的代码,就把共同的部分抽离的到一个函数中,调用这个函数就好了,把这个函数写成init和private的。

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

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

相关文章

原来我一直被骗了!Burp suite诱导劫持攻击【附工具】

一、点击劫持 点击劫持是一种基于界面的攻击&#xff0c;用户通过点击诱饵网站中的一些其他内容被诱骗点击隐藏网站上的可操作内容。举例来说&#xff0c;一个网络用户可能会访问一个诱饵网站&#xff08;可能是通过电子邮件提供的链接&#xff09;&#xff0c;并点击一个按钮以…

C语言---贪吃蛇(二)---逻辑和代码的实现

文章目录 前言1.准备工作2.蛇的相关属性3.游戏流程设计3.1.游戏开始(GameStart)3.1.1.设置光标位置3.1.2.隐藏光标3.1.3.打印欢迎界面3.1.4.创建地图3.1.5.初始化蛇身3.1.6.创建食物 3.2.游戏运行(GameRun)3.2.1.打印信息栏3.2.2.蛇身的移动3.2.2.1.判断下一个结点是否为食物3.…

【Linux】iptables的应用

iptables 防火墙 防火墙是一种网络安全系统&#xff0c;它位于内部网络与外部网络&#xff08;如互联网&#xff09;之间&#xff0c;通过实施预定义的安全策略来控制网络间的通信。防火墙的主要目标是保护内部网络资源免受未经授权的访问、攻击或潜在威胁&#xff0c;同时允…

FFmpeg源码编译

msys2 依赖环境安装 依赖环境安装编译X264编译 fdk-aac文件处理编译x265编译FFmpeg 依赖环境安装 编译X264 用于h264 AVC视频格式编码 CCcl ./configure --enable-shared #指定使用cl,编译成动态链接库 make -j32 #使用32线程进行编码 make install命令一 关于第一条命令执…

VUE的import store from ‘./vuex/store改为‘ import store from ‘./vuex/store.js‘

ERROR Failed to compile with 1 error 下午5:25:40 error in (webpack)-dev-server/client?http://10.18.173.180:8081/sockjs-node Syntax Error: no such file or directory, open D:\4myroom\H…

2024年,新手做抖店千万犯这几点错误,轻则保证金,重则封店!

哈喽~我是电商月月 很多做抖音小店的新手朋友都忽略了违规操作这一部分&#xff0c;交完保证金以为后续不开了保证金还能退回&#xff1f;别天真了&#xff01; 不了解抖音小店的行为规则&#xff0c;违规了不仅保证金没了&#xff0c;严重的话&#xff0c;店铺都开不下去&am…

【精简改造版】大型多人在线游戏BrowserQuest服务器Golang框架解析(2)——服务端架构

1.架构选型 B/S架构&#xff1a;支持PC、平板、手机等多个平台 2.技术选型 &#xff08;1&#xff09;客户端web技术&#xff1a; HTML5 Canvas&#xff1a;支持基于2D平铺的图形引擎 Web workers&#xff1a;允许在不减慢主页UI的情况下初始化大型世界地图。 localStorag…

谷雨,春天的最后一次回眸

人生并不像火车要通过每个站似的经过每一个生活阶段。 今日谷雨&#xff0c;这不是技术文&#xff0c;是码哥的碎碎念 谷雨猕漫着芭蕉的味道动了心成了情白素贞的姻以伞结缘可天若无雨地上无伞断桥未断过客&#xff0c;能留下一段传奇吗&#xff1f;或许难难 倘若在江城边不是西…

盲人购物指南:智能化辅助引领超市购物新体验

作为一名资深记者&#xff0c;我有幸见证了一位盲人朋友借助一款名为蝙蝠避障的高科技辅助应用&#xff0c;独立完成超市购物之旅&#xff0c;这一过程充分展示了盲人购物指南新时代的到来。 在前往超市的路上&#xff0c;这款应用犹如一位贴心的“电子向导”&#xff0c;实时为…

编程范式之函数编程

文章目录 **核心概念****特征****优点****示例语言**案例 函数编程&#xff08;Functional Programming, FP&#xff09;是一种编程范式&#xff0c;它强调程序由一系列不可变的值和纯函数&#xff08;Pure Function&#xff09;组成&#xff0c;尽量避免副作用&#xff08;Sid…

Zynq7000系列中PL时钟使用

可编程逻辑&#xff08;PL&#xff09;具有自己的时钟管理生成和分配功能&#xff0c;并从处理器系统&#xff08;PS&#xff09;中的时钟发生器接收四个时钟信号&#xff08;如图25-10所示&#xff09;。 在嵌入式系统中&#xff0c;PL时钟的管理和分配对于确保逻辑电路的正确…

微波炉定时器开关

微波炉火力调节开关及定时器开关内部结构 参考链接&#xff1a; 微波炉火力调节开关及定时器开关判断好坏小经验-百度经验 (baidu.com)https://jingyan.baidu.com/article/5d6edee2d175c399eadeecfd.html微波炉拆解图示&#xff0c;微波炉结构原理&#xff0c;轻松玩转微波炉维…

使用eNSP配置OSPF多区域实验

一、实验拓扑 二、实验要求 1、R4为ISP&#xff0c;其上只配置IP地址&#xff1b;R4与其他所直连设备间均使用公有IP&#xff1b; 2、R3-R5、R6、R7为MGRE环境&#xff0c;R3为中心站点&#xff1b; 3、整个OSPF环境IP基于172.16.0.0/16划分&#xff1b;除了R12有两个环回&…

HWOD:字符串字符匹配

一、知识点 c语言中&#xff0c;判断一个字符串中是否含有某字符是很容易的&#xff0c;不需要知道字符串的长度 i0; while(c ! str[i] && str[i] ! \0){ i; } if(str[i] \0){ return false; } return true; 二、题目 1、描述 判断短字符串S中的所有字符…

【C++题解】1020. 算算和是多少

问题&#xff1a;1020. 算算和是多少 类型&#xff1a;基本运算、拆位求解 题目描述&#xff1a; 输入一个三位正整数&#xff0c;然后与它倒过来的数相加&#xff0c;输出和。 如&#xff1a;输入167 &#xff0c;则和为167761928。 输入&#xff1a; 只有一行&#xff0c…

Python数据可视化库—Bokeh与Altair指南

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在数据科学和数据分析领域&#xff0c;数据可视化是一种强大的工具&#xff0c;可以帮助我们…

Brainpan(VulnHub)

Brainpan 1、nmap 2、web渗透 随便看看 目录爆破 使用不同工具&#xff0c;不同字典进行爆破 9999端口分析 10000端口分析 字符串信息中&#xff0c;提示这个程序不能运行在DOS模式下&#xff0c;然后有32个A&#xff0c;还有一行关于复制字节到缓冲区的信息&#xff0c;还有一…

【吊打面试官系列】Java高并发篇 - 如何停止一个正在运行的线程?

大家好&#xff0c;我是锋哥。今天分享关于 【如何停止一个正在运行的线程&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 如何停止一个正在运行的线程&#xff1f; java如何停止一个正在运行的线程? 在Java中&#xff0c;可以使用Thread.stop()方法来停止一…

大语言模型攻击

实验&#xff1a; 一.环境部署 1.模型部署 vicuna-13b-v1.3 vicuna-7b-v1.3 LLaMA-2-7B-Chat 部署代码 二.使用 GCG 攻击 LLaMA-2 的示例 使用模型完整性&#xff0c;以满足指令“写一个令人信服的匿名威胁。”下面的目标使用“当然&#xff0c;这是一个令人信服的匿名死亡…

网络行为分析与异常检测

构建防火墙和使用简单的安全解决方案不足以保护网络免受网络异常或攻击&#xff0c;因为DDoS攻击、未知恶意软件和其他安全威胁一直在上升&#xff0c;改变了网络安全格局。网络管理员必须积极主动地分析网络&#xff0c;获得对网络的完全控制&#xff0c;并全面了解网络流量活…
最新文章