C++ 45 之 赋值运算符的重载

#include <iostream>
#include <string>
#include <cstring>
using namespace std;class Students05{
public:int m_age;char* m_name;Students05(){}Students05(const char* name,int age){// 申请堆空间保存m_name;this->m_name = new char[strlen(name) + 1];strcpy(this->m_name, name);this->m_age = age;}// 清空堆空间~Students05(){if(this->m_name){delete[] this->m_name;this->m_name = NULL;}}// 重载赋值运算符 = Students05& operator=(const Students05 &p){// 先判断原来的堆区是否有内容if(this->m_name){delete[] this->m_name;this->m_name = NULL;}this->m_name = new char[strlen(p.m_name) + 1];strcpy(this->m_name, p.m_name);this->m_age = p.m_age;return *this;}// 拷贝构造函数重载。使用深拷贝解决浅拷贝的free问题Students05(const Students05 &p){this->m_name = new char[strlen(p.m_name) + 1];strcpy(this->m_name, p.m_name);this->m_age = p.m_age;}
};int main()
{// 编译器默认会给类4个默认函数: 默认构造函数、析构函数、拷贝函数、// 拷贝赋值运算符(operator=)// stu3 = stu2; // 赋值操作 走拷贝赋值运算符(operator=)// Students05 stu3 = stu2; //初始化操作,走复制构造函数 // 此时stu3 刚刚创建// Students05 stu3 = Students05(stu2); //初始化操作,走复制构造函数// Students05 stu1(18);// // Students05 stu2 = stu1; // 相当于Students05 stu2 = Students05(stu1);// Students05 stu2;// stu2 = stu1;// cout << stu1.m_age << endl;Students05 stu1("张三",18);Students05 stu2("四",28);// 执行重载函数时 stu1作为Students05& operator=(const Students05 &p)的参数 里面的this 是stu2stu2 = stu1;   // 这种写法叫赋值   // 默认是浅拷贝,执行delete的时候会报错,学要深拷贝才可以Students05 stu3("王",39);stu3 = stu2 = stu1; // 想链式编程,需要返回当前对象Students05 stu4 = stu3; // 隐式法 调用的默认拷贝构造函数,我们自己用new在堆空间中申请的内存,清空的时候会出现错误,需要重载拷贝构造函数cout << stu1.m_name << stu1.m_age << endl;cout << stu2.m_name << stu2.m_age << endl;cout << stu3.m_name << stu3.m_age << endl;// int a = 10;// int b = 20;// int c;// c = a = b;// cout << "a: " << a << endl;// cout << "b: " << b << endl;// cout << "c: " << c << endl;return 0;
}

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

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

相关文章

案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序

案例 Cacheable 是 Spring Framework 提供的一个注解&#xff0c;用于在方法执行前先检查缓存&#xff0c;如果缓存中已存在对应的值&#xff0c;则直接返回缓存中的值&#xff0c;而不执行该方法体。如果缓存中不存在对应的值&#xff0c;则执行方法体&#xff0c;并将方法的…

免费下载全球逐日气象站点数据

环境气象数据服务平台近期升级了NOAA GSOD 全球逐日气象站点数据&#xff08;NOAA Global Surface Summary of the Day &#xff09;的检索方式&#xff0c;升级后&#xff0c;用户无需注册&#xff0c;即可以在平台上下载全球逐日气象站点数据。 检索方式&#xff1a; 1. 访…

Redis数据结构之字符串(sds)

Redis数据结构之字符串(sds) redisObject 定义如下 struct redisObject {unsigned type:4; //数据类型unsigned encoding:4; /*encoding 编码格式&#xff0c;及存储数据使用的数据结构&#xff0c;同一类型的数据&#xff0c;Redis 会根据数据量&#xff0c;占用内…

Python学习打卡:day07

day7 笔记来源于&#xff1a;黑马程序员python教程&#xff0c;8天python从入门到精通&#xff0c;学python看这套就够了 目录 day753、列表的常用操作课后练习题54、列表的循环遍历列表的遍历—— while 循环列表的遍历—— for 循环while 循环和 for 循环的对比练习 55、元组…

PCL 点云区域生长分割

点云区域生长分割 一、代码示例二、运行结果🙋 前言 区域生长分割(RegionGrowing):是一种改进的ICP(Iterative Closest Point)算法,用于处理3D点云配准问题,特别是在存在噪声、外点(不匹配点)或数据分布不均等复杂情况下。 基本思想:首先依据点的曲率值对点进行排序…

一个简单的玩具机器人代码

编写一个玩具机器人脚本通常取决于机器人的硬件、接口和具体功能。然而&#xff0c;由于我们不能直接控制一个真实的硬件机器人&#xff0c;所以只是写一个模拟的C语言脚本示例&#xff0c;该脚本描述了一个简单的玩具机器人可能执行的一些基本操作。 假设我们的“玩具机器人”…

3 高频小信号放大器

分类与质量指标 分类 质量指标 增益 电压与功率的放大倍数。 通频带 放大效果比较好的频率范围。 选择性 放大目标信号以滤除其他信号的综合能力。 稳定性 噪声系数 晶体管高频等效电路 混合Π等效电路 共射三极管的等效电路。 Y参数等效电路 混合Π与Y参数等效电路的转换 单…

蚂蚁集团:2023年科研投入211.9亿元

6月13日&#xff0c;蚂蚁集团发布2023年可持续发展报告。报告显示&#xff0c;2023年蚂蚁集团科研投入达到211.9亿元&#xff0c;再创历史新高&#xff0c;蚂蚁科技投入的重点是人工智能和数据要素技术。 蚂蚁集团董事长兼CEO井贤栋在报告致辞中说&#xff0c;面向未来&#x…

【LeetCode 动态规划】买卖股票的最佳时机问题合集

文章目录 1. 买卖股票的最佳时机含冷冻期 1. 买卖股票的最佳时机含冷冻期 题目链接&#x1f517; &#x1f34e;题目思路&#xff1a; &#x1f34e;题目代码&#xff1a; class Solution { public:int maxProfit(vector<int>& prices) {int n prices.size();ve…

NVIDIA Triton系列01-应用概论

NVIDIA Triton系列01-应用概论 推理识别是人工智能最重要的落地应用&#xff0c;其他与深度学习相关的数据收集、标注、模型训练等工作&#xff0c;都是为了得到更好的最终推理性能与效果。 几乎每一种深度学习框架都能执行个别的推理工作&#xff0c;包括 Tensorflow、Pytorc…

STL——set、map、multiset、multimap的介绍及使用

文章目录 关联式容器键值对树形结构与哈希结构setset的介绍set的使用set的模板参数列表set的构造set的使用set的迭代器使用演示 multisetmultiset演示 mapmap的定义方式map的插入map的查找map的[ ]运算符重载map的迭代器遍历multimapmultimap的介绍multimap的使用 在OJ中的使用…

tsp可视化python

随机生成点的坐标并依据点集生成距离矩阵&#xff0c;通过点的坐标实现可视化 c代码看我的这篇文章tsp动态规划递归解法c from typing import List, Tuple import matplotlib.pyplot as plt from random import randintN: int 4 MAX: int 0x7f7f7f7fdistances: List[List[in…

Codeforces Round 953 (Div. 2) A - C 题解

因为有事只做了A-C&#xff0c;都比较简单&#xff0c;全是很简单的思维&#xff0c;明天有空还会添加上D&#xff0c;如果有人需要可以明天常来看看&#xff01; 进入正题&#xff1a; A. Alice and Books 题意&#xff1a;给你n个数字&#xff0c;将这些数字分到两堆里&am…

杂谈-Android和Ios的对比

在当前的智能手机市场中&#xff0c;Android和iOS两大操作系统占据了主导地位。它们各自拥有独特的优势和劣势&#xff0c;为用户提供了不同的使用体验和选择。以下是对Android和iOS系统优缺点的详细对比&#xff0c;旨在帮助用户更全面地了解两大系统。 一、Android系统 优点…

Hadoop生态圈中的各个组件的介绍

hdfs namenode 维护目录树&#xff0c;维护命名空间。负责确定指定的文件块到具体的Datanode结点的映射关系。&#xff08;在客户端与Datanode之间共享数据&#xff09;管理Datanode结点的状态报告 datanode 负责管理它所在结点上存储的数据的读写&#xff0c;及存储数据。…

【Android面试八股文】你来说一说Java对象是如何晋升为老年代的?

文章目录 一、对象年龄达到阈值1.1 演示过程1.2 结论二、大对象直接进入老年代三、分配担保机制空间分配担保为什么要进行空间担保 ?`Minor Gc`后的对象太多无法放入`Survivor`区怎么办?如果`Minor gc`后新生代的对象都存活下来,然后需要全部转移到`老年代`,但是老年代空间…

@AliasFor 使用

AliasFor 使用 AliasFor 它允许开发者为一个注解的属性指定别名。通过使用AliasFor&#xff0c;我们可以提供多个名称来引用同一属性&#xff0c;从而增加了代码的灵活性和可读性 定义一个注解 package com.example.demo.aspect;import org.springframework.core.annotation…

asyncio协程提高执行效率

from fastapi import FastAPI import asyncioapp FastAPI()async def task1():# 模拟执行任务1print("开始执行任务1")await asyncio.sleep(1)print("结束执行任务1")return "Result from Task 1"async def task2():# 模拟执行任务2print("…

论文阅读笔记(通道注意力)

论文阅读笔记&#xff08;通道注意力&#xff09; 摘要Abstract1. SENet1.1 研究背景1.2 创新点1.3 SE块的构建过程1.3.1 注意力和门机制1.3.2 SE块具体运行过程1.3.3 通道间依赖关系的提取1.3.4 自适应重新校正(Excitation) 1.4 SE结合先进架构的灵活应用1.5 实验1.6 模型的实…

软考初级网络管理员__操作系统单选题

1.使用Windows提供的网络管理命令(请作答此空)可以查看本机的路由表&#xff0c;()可以修改本机的路由表。 tracert arp ipconfig netstat 2.在Windows 的命令行窗口中键入命令C:\>nslookupset type MX>202.30.192.2这个命令序列的作用是查询()。 邮件服务器信息 …