黑马程序员7

算数运算符重载

运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型

加号运算符

通过自己写函数,实现两个对象相加属性后返回新的对象

在这里插入图片描述
两种方式重载
成员函数方式重载 全局函数重载
上来 person p3 = p2+p1 会报错 ,没有这种运算

成员函数重载写在类的里面
person operator+(person &p)
{
person temp;
temp.m_a =this->m_a+ p.m_a;
}

这里的 引用相当于就是传入的哪个person
void func(int& ref)
//发现是引用,转换为 int* const ref = &a; 地址
ref = 100; // ref是引用,转换为*ref = 100

Person p1(10, 10);
Person p2(20, 20);

本质上为 person p3 = p1.operator+(p2);
简化为person p3 = p2+p1。

//运算符重载 可以发生函数重载
Person p4 = p3 + 10; //相当于 p4 = operator+(p3,10)

总结1:对于内置的数据类型的表达式的的运算符是不可能改变的 1+1 = 2 无法改变

总结2:不要滥用运算符重载

左移运算符

在这里插入图片描述

在这里插入图片描述
这不是想要的结果

通常不会用成员函数重载<<运算符,因为无法实现cout在左侧
只能用全局函数实现
//ostream对象只能有一个
本质 operator<<(cout,p) 简化为 cout<<p
标准输出流对象 ,通过标准输出流这个类
cout全局只有一个 必须以引用的对象出现

ostream& operator<<(ostream& out, Person& p) {out << "a:" << p.m_A << " b:" << p.m_B;return out;
}

注意返回值 如果返回值是一个void
那么只能 cout<<p
如果 cout<<p<<endl 会报错
注意链式编程思想,返回还是一个cout得话就可以继续往后追加
cout属于标准输出流对象 ostream& 引用的方式返回

引用本质是取别名 cout名字随便取

如果对象属性设置为私有,可以用友员的方式
friend ostream& operator<<(ostream& out, Person& p);

总结:重载左移运算符配合友元可以实现输出自定义数据类型

递增运算符重载

先实现左移运算符的重载
再重载++运算符
前置 后置
返回什么值不知道就先写++
就返回void
cout << ++myInt << endl; 报错
需要返回自身 this 同时 解引用 加星号

 MyInteger& operator++() {  返回引用   对于内置的而言 cout<<++(++a)<<endl;  a连加了两次如果不返回引用 那么自己重载的a不会加两次 ,因为是返回新的对象,对新的对象进行再一次加操作//先++						m_Num++;//再返回return *this;}//后置++MyInteger operator++(int) {  涉及到了函数重载问题 int代表占位参数 区分前置和后置//先返回结果MyInteger temp = *this; //记录当前本身的值,然后让本身的值加1,但是返回的是以前的值,达到先返回后++;// 后递增m_Num++; 自身加1//最后将记录结果返回return temp;   为什么返回值 因为 局部对象不能返回引用 这里返回的局部变量}

总结: 前置递增返回引用,后置递增返回值

赋值运算符重载

c++编译器至少给一个类添加4个函数

默认构造函数(无参,函数体为空)
默认析构函数(无参,函数体为空)
默认拷贝构造函数,对属性进行值拷贝
赋值运算符 operator=, 对属性进行值拷贝

值拷贝都会引发深浅拷贝的问题
堆区数据重复释放的问题
cout << “p1的年龄为:” << *p1.m_Age << endl;
p1.m_Age 为指针,需要解引用 *p1.m_Age 获取数据

仅仅只是用了 p2 = p1 默认的赋值运算 然后再用析构函数释放 会报错
在这里插入图片描述

Person& operator=(Person &p){if (m_Age != NULL)			先判断是否有属性在堆区,如果有先释放干净,然后再深拷贝{delete m_Age;m_Age = NULL;}//编译器提供的代码是浅拷贝//m_Age = p.m_Age;//提供深拷贝 解决浅拷贝的问题m_Age = new int(*p.m_Age);//返回自身return *this;		a=b=c 要有返回值 返回自身 this指针 解引用}

int *m_Age; 申明的是指针
p1.m_age
cout << “p1的年龄为:” << *p1.m_Age << endl;
cout << “p2的年龄为:” << *p2.m_Age << endl;
cout << “p3的年龄为:” << *p3.m_Age << endl;

关系运算符重载

在这里插入图片描述
在函数中编写
返回值bool
bool operator ==(person &p)
{
}

函数调用运算符重载

函数调用运算符 () 也可以重载
由于重载后使用的方式非常像函数的调用,因此称为仿函数
仿函数没有固定写法,非常灵活

运算符重载很多都是引用传递

//匿名对象调用
cout << "MyAdd()(100,100) = " << MyAdd()(100, 100) << endl;

MyAdd()相当于创建了一个匿名对象 然后后面有个(100,100)
匿名对象 释放问题

地址传递和引用

引用传递 是 mySwap03(a, b); void mySwap03(int& a, int& b) {
地址传递 mySwap02(&a, &b); void mySwap02(int* a, int* b)

分文件编写

#include “…/touh/swap.h”
task,json中
“args”: [/
“F:/mycpp/cpp/test02.cpp”

1

职工管理类,作用于界面显示
相应的头文件 源文件

void WorkerManager::exitSystem()
{cout << "欢迎下次使用" << endl;system("pause");exit(0);
}

职工管理系统

7、添加职工

如果想在程序中维护这个不定长度的数组,可以将数组创建到堆区,并利用Worker **的指针维护

在这里插入图片描述

WorkerManager::WorkerManager() 构造函数

Worker ** newSpace = new Worker*[newSize]; 开创了一个新的work类型的数组 指针在堆区
worker类型的二次指针

if (this->m_EmpArray != NULL) 如果不是空指针 就要设置地址 不然就可以直接设置值

二级指针

int a =100;
int *p1 = &a;
int **p2 = &p1;

文件交互

​ 在上一个添加功能中,我们只是将所有的数据添加到了内存中,一旦程序结束就无法保存了

​ 因此文件管理类中需要一个与文件进行交互的功能,对于文件进行读写操作‘

this->m_EmpArray[i]->m_Id
this指针指向m_EmpArray[i] 得到了一个work指针 work指针再次指向m_id

ofs << this->m_EmpArray[i]->m_Id << " " << this->m_EmpArray[i]->m_Name << " " << this->m_EmpArray[i]->m_DeptId << endl;

不需要手动创建文件,它会自动创建文件并写入数据

读取文件

第一次使用,文件未创建
文件存在,但是数据被用户清空
文件存在,并且保存职工的所有数据

WorkerManager::WorkerManager()
{ifstream ifs;ifs.open(FILENAME, ios::in);//文件不存在情况if (!ifs.is_open()){cout << "文件不存在" << endl; //测试输出this->m_EmpNum = 0;  //初始化人数this->m_FileIsEmpty = true; //初始化文件为空标志this->m_EmpArray = NULL; //初始化数组ifs.close(); //关闭文件return;}
}

https://gitee.com/jiangjiandong/Cpp-0-1-Resource/blob/master/%E7%AC%AC4%E9%98%B6%E6%AE%B5%E5%AE%9E%E6%88%98-%E5%9F%BA%E4%BA%8E%E5%A4%9A%E6%80%81%E7%9A%84%E4%BC%81%E4%B8%9A%E8%81%8C%E5%B7%A5%E7%B3%BB%E7%BB%9F/%E8%AE%B2%E4%B9%89/%E8%81%8C%E5%B7%A5%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F.md

https://developer.aliyun.com/article/980381#:~:text=1%E3%80%81%E9%80%90%E8%A1%8C%E8%AF%BB%E5%85%A5%E6%96%87%E4%BB%B6%20void%20readTxt%20%28string%20file%29%20%7B%20ifstream%20infile%3B,%28infile%2Cs%29%29%20%7B%20cout%3C%3Cs%3C%3Cendl%3B%20%7D%20infile.close%20%28%29%3B%20%2F%2F%E5%85%B3%E9%97%AD%E6%96%87%E4%BB%B6%E8%BE%93%E5%85%A5%E6%B5%81%20%7D

逐个字符读取
while (ifs >> id && ifs >> name && ifs >> dId)

修改职工函数实现

delete this->m_EmpArray[ret];

删除

ofstream ofs(FILENAME, ios::trunc);   //打开模式 ios::trunc 如果存在删除文件并重新创建delete[] this->m_EmpArray;this->m_EmpArray = NULL;   释放原有空间,并重新指向新的

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

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

相关文章

黑马程序员14套经典IT教程+面试宝典

很多同学对互联网比较感兴趣 &#xff0c;奈何苦恼不知道如何入门。今天免费给大家分享一波&#xff0c;黑马程序员14套经典IT教程程序员面试宝典&#xff01;涉及Java、前端、Python、大数据、软件测试、UI设计、新媒体短视频等。从厌学到学嗨&#xff0c;你只差一套黑马教程&…

latex添加参考文献(I found no \citation commands、I found no \bibdata command、I found no \bibstyle comma)

1、处理模板里的reference.bib文件 2、使用reference.bib文件 3、添加引用 4、配置编译器&#xff0c;否则编译会报错。在该目录填写如下代码&#xff1a; {"latex-workshop.latex.outDir": "%DIR%/.build","latex-workshop.view.pdf.viewer": &…

八股文总是忘?一张图牢记JVM内存结构|金三银四系列

金三银四又来啦&#xff01;八股文还是得复习起来&#xff0c;最近准备把一些常见的八股文知识点聊聊。 本文详解了JVM内存结构和各个部分详细内容&#xff0c;应付面试绰绰有余&#xff01; 点击上方“后端开发技术”&#xff0c;选择“设为星标” &#xff0c;优质资源及时送…

【Android面试】2023最新面试专题:Java虚拟机原理(一)

1 描述JVM类加载过程 这道题想考察什么&#xff1f; 了解JVM是如何加载类的&#xff0c;并且通过JVM类加载过程能更直观了解掌握如APT注解处理器执行、热修复等技术的本质 考察的知识点 JVM类加载过程 考生如何回答 类加载的本质 一般情况下&#xff0c;类的数据都是在C…

JVM 锁优化和逃逸分析详解

1 锁优化 JVM 在加锁的过程中&#xff0c;会采用自旋、自适应、锁消除、锁粗化等优化手段来提升代码执行效率。 1.1 自旋锁和自适应自旋 现在大多的处理器都是多核处理器 &#xff0c;如果在多核心处理器&#xff0c;有让两个或者以上的线程并行执行&#xff0c;我们可以让一个…

kubernetes学习之路--BadPods(Part1)

摘要&#xff1a;对Pod配置进行实战学习&#xff0c;以BadPods项目为例学习危险配置。 目录 一.BadPods介绍及使用 二.BadPods配置学习 2.1 less1--Everything allowed 基本操作学习 2.2 less1--Everything allowed 渗透学习 一.BadPods介绍及使用 项目地址&#xff1a;h…

基于GPT3.5实现本地知识库解决方案-利用向量数据库和GPT向量接口-实现智能回复并限制ChatGPT回答的范围...

标题有点长&#xff0c;但是基本也说明出了这篇文章的主旨&#xff0c;那就是利用GPT AI智能回答自己设置好的问题 既能实现自己的AI知识库机器人&#xff0c;又能节省ChatGPT调用的token成本费用。 代码仓库地址 document.ai: 基于GPT3.5的通用本地知识库解决方案 下面图片是整…

英语语法大全

文章目录 一、主语1、名词、代词和动词做主语2、主语从句做主语&#xff0c;谓语动词用单数3、主语从句练习 二、谓语动词1、谓语动词种类2、主谓一致 三、宾语1、单宾语2、双宾语3、复合宾语4、宾语从句 四、定语1、定语从句2、定语从句的翻译 五、状语1、分词做状语2、独立主…

规模效应和网络效应

前几天小米造车、华为造车、大疆造车、滴滴造车、百度造车集中PR。群中讨论智能新能源汽车的未来集中。甚至延伸讨论到了&#xff1a;云计算的未来集中度、SaaS的未来集中度。怎么能提高行业集中度&#xff0c;是我们都在苦苦思考的。 于是就讨论到两个词&#xff1a;规模效应、…

真*加班狗聚众舔福豹《打工人的那些事》

真*加班狗聚众舔福豹《打工人的那些事》 文章目录 近日的杭州金钱豹外逃新闻&#xff0c;相信大家都听说了。 没看过的也不急&#xff0c;我在这里帮大家简单理一理。 根据杭州市富阳区8日官方发布&#xff0c;5月7日20时许&#xff0c;群众报警称在富阳区银湖街道受降四联村…

国内“风口”转变,中国游戏公司纷纷“外逃”,东南亚是个好去处

中国游戏开发商正在加强对国际市场&#xff0c;特别是东南亚市场的承诺&#xff0c;因为他们的国内公司正在努力应对更困难的中国市场&#xff0c;以便实施在下一阶段发展布局。 根据移动应用市场情报公司Sensor Tower的一份报告&#xff0c;按收入排名的前100名全球移动游戏中…

chatgpt赋能python:Python编译成库的利与弊

Python编译成库的利与弊 Python作为一种高级编程语言&#xff0c;具有简洁易读的语法和强大的生态系统&#xff0c;在数据科学、Web开发、游戏开发等领域得到广泛应用。然而&#xff0c;Python解释器的执行效率较低&#xff0c;因此为了提高Python程序的性能&#xff0c;常使用…

产业大模型刚开卷,京东跑进“最后半公里”

点击关注 文&#xff5c;姚 悦 编&#xff5c;王一粟 “京东一直在探索哪些产品、技术、场景可以真正把大模型用起来&#xff0c;在我们内部的场景中反复验证后&#xff0c;才决定在7月份对外发布&#xff0c;现在我们在零售、健康、物流、金融等业务场景里已经积累了一些经…

赠书 | 写作、绘画、游戏、音视频编辑…AIGC为内容生产带来了什么?

文中有数据派THU福利哦 当AIGC产品不断涌向社会&#xff0c;人们纷纷认为美图app“危了“的时候&#xff0c;美图公司创始人兼首席执行官吴欣鸿表示&#xff0c;影像和 AIGC 的创新结合&#xff0c;将带来影像生产力的大爆发&#xff0c;同时会为相关领域带来新的职业和新的创业…

中文公开聊天语料库

源 / 专知 语料内容 该库搜集了包含chatterbot、豆瓣多轮、PTT八卦语料、青云语料、电视剧对白语料、贴吧论坛回帖语料、微博语料小黄鸡语料共8个公开闲聊常用语料和短信&#xff0c;并对其进行了统一化规整和处理&#xff0c;达到直接可以粗略使用的目的。 使用方法 语料下载&…

获得文本语料和词汇资源(基于nltk)

在自然语言处理的实际项目中&#xff0c;通常要使用大量的语言数据或者语料库。本章的目的是要回答下列问题&#xff1a; 什么是有用的文本语料和词汇资源&#xff0c;我们如何使用 Python 获取它们&#xff1f;哪些 Python 结构最适合这项工作&#xff1f;编写 Python 代码时…

NLP领域中文对话系统数据集总结(有下载地址)

一、豆瓣多轮对话数据集 1、简介&#xff1a; 测试数据包含 1000 个对话上下文&#xff0c;对于每个上下文&#xff0c;创建 10 个响应作为候选。正确的响应意味着响应可以自然地回复给定上下文的消息。每对收到三个标签&#xff0c;大多数标签被视为最终决定。 2、数据格式&…

肠道病毒组识别早产儿坏死性小肠结肠炎发病前的特异性病毒特征

期刊&#xff1a;Nature microbiology 影响因子&#xff1a;30.964 发表时间&#xff1a;2022 样本类型&#xff1a;粪便样本 研究背景 坏死性小肠结肠炎&#xff08;NEC&#xff09;是早产的严重后果&#xff0c;通常与肠道细菌微生物群的改变有关。然…

新型病毒来了【PcaPatchDbTask】

急报&#xff01;&#xff01;新型病毒来了【PcaPatchDbTask】 1.什么是PcaPatchDbTask PcaPatchDbTask是一种新型的木马 2.PcaPatchDbTask的危害 【1】他会劫持你的浏览器主页 【2】他会读取你的键盘信息 【3】他会获取你电脑的联系人菜单 【4】它甚至不会被安全软件查杀 3.…

Nature Reviews:给医生的菌群分析指南(下)

本文转载自“态昌基因”&#xff0c;己获授权。 Nature Reviews&#xff1a;给医生的菌群分析指南(上&#xff09;&#xff0c;主要从实验阶段介绍了以下7方面&#xff0c;不清楚的请点击链接跳转原文阅读。 1. 样本选择 2. 样本的采集 3. 样本的保存与保护剂 4. DNA提取 5.我到…