Day43

思维导图

在这里插入图片描述

深拷贝和浅拷贝

1> 如果类中有指针成员时,如果没有显性的定义拷贝构造和拷贝赋值函数,系统默认提供的都只能实现浅拷贝,需要显性定义出深拷贝函数,为了完成指针成员的独立赋值,如果类中没有指针成员,使用系统提供的浅拷贝函数就可以
2> 深拷贝指的是,两个类对象中的指针成员指向不同的空间,但是空间内存的值是相同的
3> 浅拷贝指的是,两个类对象中的指针成员指向同一片空间,在析构时会发生对内存空间的二次释放问题,一个类对象中指针成员指向空间的值修改过也会导致另一个类对象的也被修改

运算符重载

#include <iostream>
using namespace std;class Person
{
private:int age;int weight;
public://无参构造Person():age(18),weight(100){}//有参构造Person(int age,int weight){this->age = age;this->weight = weight;}
/*//拷贝构造函数Person(Person &other){age = other.age;p = new int(*(other.p));cout << "拷贝构造函数" << endl;}//拷贝赋值函数Person &operator = (Person &other){if(this != &other){age = other.age;*p = *(other.p);cout << "拷贝赋值函数" << endl;}return *this;}//析构函数~Person(){delete p;p = nullptr;cout << "析构函数" << endl;}
*/void show(){cout << "age = " << age << "   weight = " << weight << endl;}//赋值运算符Person operator =(const Person &a){Person temp;temp.age = a.age;temp.weight = a.weight;return temp;}Person &operator +=(const Person &a){this->age = this->age + a.age;this->weight = this->weight + a.weight;cout << "******* += *******" <<  endl;return *this;}Person &operator -=(const Person &a){this->age = this->age - a.age;this->weight = this->weight - a.weight;cout << "******* -= *******" <<  endl;return *this;}Person &operator *=(const Person &a){this->age = this->age * a.age;this->weight = this->weight * a.weight;cout << "******* *= *******" <<  endl;return *this;}Person &operator /=(const Person &a){this->age = this->age / a.age;this->weight = this->weight / a.weight;cout << "******* /= *******" <<  endl;return *this;}Person &operator %=(const Person &a){this->age = this->age % a.age;this->weight = this->weight % a.weight;cout << "******* %= *******" <<  endl;return *this;}//关系运算符bool operator &&(Person &a){cout << "******* && *******" <<  endl;return this->weight && a.weight;}bool operator ||(Person &a){cout << "******* || *******" <<  endl;return this->weight || a.weight;}bool operator <(Person &p2){cout << "******* < *******" <<  endl;return this->weight < p2.weight;}bool operator <=(Person &p2){cout << "******* <= *******" <<  endl;return this->weight <= p2.weight;}bool operator >(Person &p2){cout << "******* > *******" <<  endl;return this->weight > p2.weight;}bool operator >=(Person &p2){cout << "******* >= *******" <<  endl;return this->weight >= p2.weight;}bool operator ==(Person &a){cout << "******* == *******" <<  endl;return this->weight == a.weight;}bool operator !=(Person &p2){cout << "******* != *******" <<  endl;return this->weight != p2.weight;}//算数运算符Person operator *(Person &a){Person temp;temp.age = this->age * a.age;temp.weight = this->weight * a.weight;cout << "******* * *******" <<  endl;return temp;}Person operator /(Person &a){Person temp;temp.age = this->age / a.age;temp.weight = this->weight / a.weight;cout << "******* / *******" <<  endl;return temp;}Person operator %(Person &a){Person temp;temp.age = this->age % a.age;temp.weight = this->weight % a.weight;cout << "******* % *******" <<  endl;return temp;}Person operator +(Person &a){Person temp;temp.age = this->age + a.age;temp.weight = this->weight + a.weight;cout << "******* + *******" <<  endl;return temp;}Person operator -(Person &a){Person temp;temp.age = this->age - a.age;temp.weight = this->weight - a.weight;cout << "******* - *******" <<  endl;return temp;}bool operator !(){cout << "******* ! *******" <<  endl;return !this->weight;}Person operator ~(){Person temp;temp.age = ~this->age;temp.weight = ~this->weight;cout << "******* ~ *******" <<  endl;return temp;}Person &operator ++()//前自增{this->age++;this->weight++;cout << "******* 前++ *******" <<  endl;return *this;}Person &operator ++(int)//后自增{static Person temp;temp.age = this->age++;temp.weight = this->weight++;cout << "******* 后++ *******" <<  endl;return temp;}Person &operator --()//前自减{this->age--;this->weight--;cout << "******* 前-- *******" <<  endl;return *this;}Person &operator --(int)//后自减{static Person temp;temp.age = this->age--;temp.weight = this->weight--;cout << "******* 后-- *******" <<  endl;return temp;}Person operator -()//负号{static Person temp;temp.age = -this->age;temp.weight = -this->weight;cout << "******* - *******" <<  endl;return temp;}};int main()
{/*//-------无参构造-------Person p1;p1.show();//-------有参构造-------int *num = new int(100);Person p2(10, 100);p2.show();//-------拷贝构造函数-------Person p3 = p1;p3.show();//-------拷贝赋值函数-------Person p4;p4 = p1;p4.show();//-------析构函数-------
*/Person p1(18,100);Person p2(20,150);Person p3;cout << (p1<=p2) <<  endl;cout << endl;cout << (!p1) <<  endl;cout << endl;p3 = ~p1;p3.show();cout << endl;cout << "自加前: ";p1.show();p3 = p1++;cout << "自加后: ";p1.show();p3.show();cout << endl;cout << "自加前: ";p1.show();p3 = ++p1;cout << "自加后: ";p1.show();p3.show();cout << endl;return 0;
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【实战】 二、React 与 Hook 应用:实现项目列表 —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表1.新建文件2.状态提升3.新建utils4.Custom Hook 学习内容来源&#xff1a;React React Hook TS 最佳实践-慕课网 相对原教程&#xff0c;我在学习开始时&#xff08;2023.0…

浅浅总结一下雅思听力技巧

1. 地图题 读题步骤要明确 &#xff08;1&#xff09;看图&#xff0c;要看看题目中是否有东南西北的标志&#xff0c;如果有的话&#xff0c;那么大概率题目中就会用到。同时也标记好左右的标志&#xff0c;防止考试的时候太紧张分不清。 弄清楚个元素的相对位置&#xff0…

Python web框架开发 - WSGI协议

目录 浏览器请求动态页面过程 多进程web服务端代码 - 面向过程 封装对象分析 增加识别动态资源请求的功能 为什么需要 WSGI协议 WSGI协议的介绍 定义WSGI接口 编写framwork支持WSGI协议&#xff0c;实现浏览器显示 hello world 本次开发的完整代码如下&#xff1a; 浏…

社区活动 | OpenVINO™ DevCon 中国系列工作坊第二期 | 使用 OpenVINO™ 加速生成式 AI...

生成式 AI 领域一直在快速发展&#xff0c;许多潜在应用随之而来&#xff0c;这些应用可以从根本上改变人机交互与协作的未来。这一最新进展的一个例子是 GPT 模型的发布&#xff0c;它具有解决复杂问题的能力&#xff0c;比如通过医学和法律考试这种类似于人类的能力。然而&am…

MySql脚本 asc 排序字段空值条目靠后的写法

场景&#xff1a; mysql中如果使用正序 asc 排序&#xff0c;那么默认是把排序字段值为空的条目数据&#xff0c;优先排到前面&#xff0c;这明显不符合需求&#xff0c;解决如下 一、重现问题 -- 按排序号-正序 select shop_id,sort_num,update_time from t_shop_trend_conte…

SpringMvc中文件上传

文章目录 1.导入文件上传所需要的jar包 2. 配置文件解析器 3.写一个前端页面 4.写后台程序 1.导入文件上传所需要的jar包 <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.…

华为FIT痩AP旁挂式隧道组网实验(一)

拓扑图 实验设备型号ACAC6005S1S5700S2S3700APAP2050DNAP4AP2050DNAR1AR200 没有配置好之前,是没有这个AP范围圈的 配置流程 接入交换机创建VLAN,配置对应端口的链路类型,放行vlan,开启端口隔离 # 与AP连接的接口(0/0/2) [S2]vlan batch 100 101 [S2]int e0/0/2 [S2-Ethern…

finalshell使用方法,前端vue更新服务器项目

首先我们看看finalshell的整体 上面是xshell一样&#xff0c;可以输命令 上面是WinSCP一样&#xff0c;可以直接拖文件&#xff0c;下载&#xff0c;上传&#xff0c;可视化视图 1.下载服务器文件 服务器文件通过Jenkins打包上去的&#xff0c;首先我们把文件下载到本地 点击…

ranger配置hive出錯:Unable to connect repository with given config for hive

ranger配置hive出錯&#xff1a;Unable to connect repository with given config for hive 我一開始我以為是我重啟了ranger-admin導致ranger有點問題&#xff0c;後面排查之後發現是我之前把hiveserver2關閉了&#xff0c;所以只需要重新開啟hiveserver2即可

Mysql主从同步失败排查思路及解决办法

1、查看同步信息 登录进从数据库后查询同步状态 show slave status \G 2、查看同步失败出现的日志 Coordinator stopped because there were error(s) in the worker(s). The most r ecent failure being: Worker 1 failed executing transaction 55b49392-fdcd-11ec-83b2-…

已烧写过的镜像重新烧镜像教程

本教程是已经烧录过镜像的SD卡&#xff0c;无法被电脑识别盘符导致无法重新烧录镜像的教程。一般是win7系统无法识别烧录过的Ubuntu系统盘符。win10可以使用SDformat软件格式化。 1.确定读卡器是否识别到SD卡。 点击计算机右键选择“管理”&#xff0c;选择磁盘管理&#xff0…

【AI底层逻辑】——篇章4:大数据处理与挖掘

目录 引入 一、大数据概述 二、数据处理的流程&方法 1、数据收集——“从无到有” 2、数据加工——“从有到能用” 3、数据分析 三、大数据改变了什么 往期精彩&#xff1a; 引入 AI的表现依赖大数据。曾经一段时间&#xff0c;对于图像识别的准确率只能达到60%~70…