当前位置: 首页 > news >正文

C++(5)

1.运算符重载

头文件

#ifndef MYSTRING_H
#define MYSTRING_H#include <iostream>
#include <cstring>using namespace std;class myString
{
private:char *str;//C风格字符串int size=0;
public:std::string s_str;//转换构造函数myString(const std::string &s);//无参构造myString();//有参构造//string s("hello world")myString(const char *s);//有参构造//string s(5,'A');myString(int n, const char s);//析构函数~ myString();//拷贝构造函数myString(const myString &other);//拷贝赋值函数myString &operator=(const myString &other);//判空函数//返回1表示空,返回0表示非空bool empty();//size函数int str_size();//c_str函数const char* c_str() const;//at函数char &at(int index);//二倍扩容void expand();//+运算符重载const myString operator+(const myString &R) const;//+运算符重载const myString operator+(const char &R);//+=运算符重载myString & operator+=(const myString &R);//&(取地址)运算符重载const myString * operator&() const;//[]运算符重载char & operator[](const int index);//==运算符重载bool operator==(const myString &R);//!=运算符重载bool operator!=(const myString &R);//<运算符重载bool operator<(const myString &R);//>运算符重载bool operator>(const myString &R);//<=运算符重载bool operator<=(const myString &R);//>=运算符重载bool operator>=(const myString &R);//将<<重载函数设为友元friend ostream & operator<<(ostream &L, const myString &R);//将>>重载函数设为友元friend istream & operator<<(istream &L, const myString &R);//将getline重载函数设为友元friend istream & getline(istream &L, myString &R);
};#endif // MYSTRING_H

源文件

#include "mystring.h"//函数定义
//转换构造函数
myString::myString(const std::string &s):s_str(s)
{cout<<"转换构造"<<endl;
}
//无参构造
myString::myString():size(10)
{str = new char[size];memset(str,'\0',10);cout<<"无参构造"<<endl;
}
//有参构造
//string s("hello world")
myString::myString(const char *s):size(strlen(s)+1)
{str = new char[size];strcpy(str,s);cout<<"有参构造"<<endl;
}
//有参构造
//string s(5,'A');
myString::myString(int n, const char s):size(n+1)
{str = new char[size];memset(str,s,n);str[n] = '\0';cout<<"有参构造"<<endl;
}
//析构函数
myString::~ myString()
{delete []str;cout<<"析构成功"<<endl;
}
//拷贝构造函数
myString::myString(const myString &other):size(other.size)
{str = new char[size];memcpy(str,other.str,size);cout<<"拷贝构造完成"<<endl;
}
//判空函数
//返回1表示空,返回0表示非空
bool myString::empty()
{if(size==0||str[0]=='\0'){cout<<"该字符串为空"<<endl;return 1;}cout<<"该字符串非空"<<endl;return 0;
}
//size函数
int myString::str_size()
{cout<<"该字符串长度为"<<size<<endl;return size;
}
//c_str函数
const char* myString::c_str() const
{cout<<"该字符串为"<<str<<endl;return str;
}
//at函数
char &myString::at(int index)
{if(empty()||index<0||index>=size){cout<<"查找失败"<<endl;}cout<<"该字符串下标为"<<index<<"的字符为"<<str[index]<<endl;return str[index];
}
//二倍扩容
void myString::expand()
{if(empty()){cout<<"二倍扩容失败"<<endl;return ;}char *nstr = new char[2*size];memcpy(nstr,str,size);delete []str;str = nstr;size*=2;cout<<"二倍扩容成功"<<endl;
}
//拷贝赋值函数
//=运算符重载
myString & myString::operator=(const myString &other)
{if(&other!=this){delete []str;size = other.size;str = new char[size];strcpy(str,other.str);cout<<"=运算符重载"<<endl;}return *this;
}
//+运算符重载
const myString myString::operator+(const myString &R) const
{myString temp;temp.size = size+R.size-1;temp.str = new char[size];strcpy(temp.str,str);strcat(temp.str,R.str);cout<<"+运算符重载"<<endl;return temp;
}
//+运算符重载
const myString myString::operator+(const char &R)
{if(R=='\0'){cout<<"+运算符重载"<<endl;return *this;}else{str[size-1] = R;size++;str[size] = '\0';cout<<"+运算符重载"<<endl;return *this;}
}
//+=运算符重载
myString & myString::operator+=(const myString &R)
{int n_size = size+R.size-1;char *n_str = new char[n_size];strcpy(n_str,str);strcat(n_str,R.str);delete []str;str = n_str;size = n_size;cout<<"+=运算符重载"<<endl;return *this;
}
//&(取地址)运算符重载
const myString * myString::operator&() const
{cout<<"&运算符重载"<<endl;return this;
}
//[]运算符重载
char & myString::operator[](const int index)
{if(index>=0&&index<size){cout<<"该字符串下标为"<<index<<"的字符为"<<str[index]<<endl;cout<<"[]运算符重载"<<endl;return str[index];}throw out_of_range("索引越界,请更改索引!");
}
//==运算符重载
bool myString::operator==(const myString &R)
{if(strcmp(str,R.str)==0){cout<<"这两个字符串相等"<<endl;cout<<"==运算符重载"<<endl;return 1;}cout<<"这两个字符串不相等"<<endl;cout<<"==运算符重载"<<endl;return 0;
}
//!=运算符重载
bool myString::operator!=(const myString &R)
{if(strcmp(str,R.str)!=0){cout<<"这两个字符串不相等"<<endl;cout<<"==运算符重载"<<endl;return 1;}cout<<"这两个字符串相等"<<endl;cout<<"!=运算符重载"<<endl;return 0;
}
//<运算符重载
bool myString::operator<(const myString &R)
{if(strcmp(str,R.str)<0){cout<<str<<"小于"<<R.str<<endl;cout<<"<运算符重载"<<endl;return 1;}cout<<str<<"不小于"<<R.str<<endl;cout<<"<运算符重载"<<endl;return 0;
}
//>运算符重载
bool myString::operator>(const myString &R)
{if(strcmp(str,R.str)>0){cout<<str<<"大于"<<R.str<<endl;cout<<">运算符重载"<<endl;return 1;}cout<<str<<"不大于"<<R.str<<endl;cout<<">运算符重载"<<endl;return 0;
}
//<=运算符重载
bool myString::operator<=(const myString &R)
{if(strcmp(str,R.str)<=0){cout<<str<<"小于等于"<<R.str<<endl;cout<<"<=运算符重载"<<endl;return 1;}cout<<str<<"大于"<<R.str<<endl;cout<<"<=运算符重载"<<endl;return 0;
}
//>=运算符重载
bool myString::operator>=(const myString &R)
{if(strcmp(str,R.str)>=0){cout<<str<<"大于等于"<<R.str<<endl;cout<<">=运算符重载"<<endl;return 1;}cout<<str<<"小于"<<R.str<<endl;cout<<">=运算符重载"<<endl;return 0;
}
//<<运算符重载
ostream & operator<<(ostream &L, const myString &R)
{L<<R.str<<endl;cout<<"<<运算符重载"<<endl;return L;
}
//>>运算符重载
istream & operator<<(istream &L, const myString &R)
{L>>R.str;cout<<">>运算符重载"<<endl;return L;
}
//getline重载
istream & getline(istream &L, myString &R)
{std::string temp;std::getline(L, temp);R.s_str = temp;cout<<"getline重载"<<endl;return L;
}

主程序

#include "mystring.h"int main()
{myString str1;myString str2("Hello world!");str2[9];myString str3(10,'Z');myString str4 = str2;myString str5("You are a genius.");str4.operator!=(str2);str5.operator>(str3);str2.operator<=(str5);cout<<str5;myString s6;cout<<"请输入字符串:";getline(cin,s6);return 0;
}

2.思维导图

相关文章:

C++(5)

1.运算符重载 头文件 #ifndef MYSTRING_H #define MYSTRING_H#include <iostream> #include <cstring>using namespace std;class myString { private:char *str;//C风格字符串int size0; public:std::string s_str;//转换构造函数myString(const std::string &a…...

【进程与线程】程序和进程在内存中的表现

在计算机系统中&#xff0c;程序和进程是两个密切相关但又有本质区别的概念&#xff0c;尤其在内存中的表现上有显著不同&#xff1a; 在这张图中可以直观地看出程序和进程在内存中的结构区别。 基本定义 程序 程序 是一个 静态实体&#xff0c;表示一组写好的指令和数据的…...

个人主页搭建全流程(Nginx部署+SSL配置+DCDN加速)

前言 最近开始准备秋招&#xff0c;打算做一个个人主页&#xff0c;以便在秋招市场上更有竞争力。 目前&#xff0c;现有的一些搭建主页的博文教程存在以下一些问题&#xff1a; 使用Github Page进行部署&#xff0c;这在国内访问容易受阻使用宝塔面板等框架&#xff0c;功能…...

语音合成的预训练模型

语音合成的预训练模型 与 ASR(语音识别)和音频分类任务相比,语音合成的预训练模型检查点明显较少。在 Hugging Hub 上,可以找到近 300 个适合的检查点。 在这些预训练模型中,重点关注两种在 Huggingface Transformers 库中开箱即用的架构——SpeechT5 和 Massive Multili…...

前端组件开发:组件开发 / 定义配置 / 配置驱动开发 / 爬虫配置 / 组件V2.0 / form表单 / table表单

一、最早的灵感 最早的灵感来自sprider / 网络爬虫 / 爬虫配置&#xff0c;在爬虫爬取网站文章时候&#xff0c;会输入给爬虫一个配置文件&#xff0c;里边的内容是一个json对象。里边包含了所有想要抓取的页面的信息。爬虫通过这个配置就可以抓取目标网站的数据。其实本文要引…...

Swagger生成Api文档的增强解决方案--knife4j

方法一&#xff1a; 使用步骤 1.导入 knife4j 的maven坐标 在pom.xml中添加依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.5.0</ver…...

Node.js - HTTP

1. HTTP请求 HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;是客户端和服务器之间通信的基础协议。HTTP 请求是由客户端&#xff08;通常是浏览器、手机应用或其他网络工具&#xff09;发送给服务器的消息&#xff0c;用来请求资源或执行…...

LangChain学习笔记2 Prompt 模板

安装 langchain 库 pip install langchain1、概念&#xff1a;提示和提示工程 在大语言模型&#xff08;LLMs&#xff09;时代&#xff0c;通过简单地更改提示中的指令&#xff0c;同一个模型可以执行多种任务。这一特性让 LLMs 在各类应用场景中都显得非常灵活和强大。然而&…...

如何在gitlab cicd中实现每月10号上午执行

在 GitLab CI/CD 中&#xff0c;可以通过设置定时触发器&#xff08;Schedules&#xff09;和脚本中的时间判断逻辑结合&#xff0c;确保任务只在每月 10 号的上午运行。 以下是实现的步骤&#xff1a; 1. 设置定时触发器 GitLab 提供了 Schedules 功能&#xff0c;可以指定每…...

SimpleFOC |SimpleFOC学习笔记汇总

在机器人领域&#xff0c;掌握无刷电机的控制相当于掌握机器人设计的“半壁江山”。这个年代&#xff0c;对个人来说学习一种新技术最好是通过开源项目了。通过开源项目快速将项目搭建起来&#xff0c;接着结合实践与理论才能真正掌握技术。 入门FOC&#xff0c;我认为最合适是…...

OpenArk64:Windows 系统分析与逆向工程工具详解

引言 在 Windows 系统的底层操作和逆向工程领域&#xff0c;OpenArk 是一款备受推崇的开源工具集。而 OpenArk64.exe 是 OpenArk 工具的 64 位版本&#xff0c;专门用于 64 位 Windows 系统。它提供了强大的功能&#xff0c;帮助用户深入分析系统内核、进程、文件、注册表等&a…...

数据储存与管理【大数据导论】

这里是阿川的博客&#xff0c;祝您变得更强 ✨ 个人主页&#xff1a;在线OJ的阿川 &#x1f496;文章专栏&#xff1a;大数据入门到进阶 &#x1f30f;代码仓库&#xff1a; 写在开头 现在您看到的是我的结论或想法&#xff0c;但在这背后凝结了大量的思考、经验和讨论 目录 1…...

《从零到一:搭建高效体育直播网站的全流程技术指南》

搭建一个体育直播网站需要综合考虑技术架构、数据来源、用户体验、安全性等多个层面。从整体到细节&#xff0c;搭建这样一个网站的流程比较复杂&#xff0c;但可以分成几个重要的步骤和技术环节。以下是搭建体育直播网站的技术层面准备全流程&#xff1a; 一、需求分析与规划 …...

松散比较(PHP)(小迪网络安全笔记~

免责声明&#xff1a;本文章仅用于交流学习&#xff0c;因文章内容而产生的任何违法&未授权行为&#xff0c;与文章作者无关&#xff01;&#xff01;&#xff01; 附&#xff1a;完整笔记目录~ ps&#xff1a;本人小白&#xff0c;笔记均在个人理解基础上整理&#xff0c;…...

一文了解如何使用 DBeaver 管理 DolphinDB

在日常的数据开发、分析和数据库运维中&#xff0c;一款优秀的 IDE 能够极大地提升工作效率。DBEaver 是一款由 Java 编写的一站式跨平台连接器&#xff0c;其社区版本已能支持连接近百种数据库&#xff0c;受到广大开发者的喜爱。近期。DolphinDB 与 DBeaver 团队共同努力&…...

网络基础知识指南|1-20个

1. IP地址: 即互联网协议地址&#xff0c;是用于标识互联网上的每一个设备或节点的唯一地址。IP地址的作用主要是进行网络设备的定位和路由&#xff0c;确保数据包可以从源设备准确地传送到目标设备。2. 子网掩码: 是用于将一个IP地址划分为网络地址和主机地址的工具。它通常与…...

01.09周四F34-Day50打卡

文章目录 1. -我大衣呢? -就在上次你放的地方。2. 这所学校是在曾经的影院上建立起来的。3. 她今天落到这个地步都怪你。4. 留得青山在,不怕没柴烧。(一息尚存,希望不灭。)5. 有善良的地方就有美德,有美德的地方就有奇迹。(《灰姑娘》原句)6. 为了和老外说话时不再发窘,所…...

Linux简介和环境搭建

Linux 介绍和环境搭建 1、发行版本 Linux 操作系统有多个主流发行版本&#xff0c;每个版本根据不同的目标、特点和使用场景为用户提供了不同的功能和体验。 Ubuntu • 特点&#xff1a;Ubuntu 是最为人熟知的 Linux 发行版之一&#xff0c;强调易用性和用户友好性&#xff…...

在移动端开发图表,uniapp+echarts,需要特殊处理,使用renderjs

1.首先要创建一个组件warning,用来装图表(我排除绿色那段代码为我的需求,不是必要代码) <template> <div class="task_container"> <div class="pop_body"> <div class="footer"> <warning…...

SpringBoot之LazyInitializationBeanFactoryPostProcessor类源码学习

源码分析 /**** author Andy Wilkinson* author Madhura Bhave* author Tyler Van Gorder* author Phillip Webb* since 2.2.0* see LazyInitializationExcludeFilter** 主要用于延迟初始化 Bean 的配置。它通过修改 BeanFactory 的配置来确保某些 Bean 在实际需要时才进行初始…...

Xbox Game Pass存档提取终极指南:3步实现跨平台游戏进度无缝迁移

Xbox Game Pass存档提取终极指南&#xff1a;3步实现跨平台游戏进度无缝迁移 【免费下载链接】XGP-save-extractor Python script to extract savefiles out of Xbox Game Pass for PC games 项目地址: https://gitcode.com/gh_mirrors/xg/XGP-save-extractor 对于使用X…...

Qwen3.5-9B-AWQ-4bit开源大模型部署教程:低成本多模态AI应用落地方案

Qwen3.5-9B-AWQ-4bit开源大模型部署教程&#xff1a;低成本多模态AI应用落地方案 1. 模型介绍与核心能力 Qwen3.5-9B-AWQ-4bit是一个经过量化的多模态开源大模型&#xff0c;特别适合需要图像理解能力的应用场景。这个版本通过AWQ&#xff08;Activation-aware Weight Quanti…...

CasRel关系抽取完整流程:从原始文本清洗、NER预处理到SPO抽取

CasRel关系抽取完整流程&#xff1a;从原始文本清洗、NER预处理到SPO抽取 1. 什么是CasRel关系抽取&#xff1f; CasRel&#xff08;Cascade Binary Tagging Framework&#xff09;是一个专门从文本中自动提取"谁-做了什么-对谁"这种关系信息的AI模型。想象一下&am…...

Pylance:重新定义Python开发体验的智能助手

Pylance&#xff1a;重新定义Python开发体验的智能助手 【免费下载链接】pylance-release Documentation and issues for Pylance 项目地址: https://gitcode.com/gh_mirrors/py/pylance-release 提升30%编码效率的10个实战技巧 还在为Python代码补全延迟烦恼&#xff…...

终极指南:如何用VideoSrt在5分钟内为视频自动生成字幕

终极指南&#xff1a;如何用VideoSrt在5分钟内为视频自动生成字幕 【免费下载链接】video-srt-windows 这是一个可以识别视频语音自动生成字幕SRT文件的开源 Windows-GUI 软件工具。 项目地址: https://gitcode.com/gh_mirrors/vi/video-srt-windows 还在为手动添加字幕…...

Translumo:跨场景实时翻译解决方案的技术实践与应用指南

Translumo&#xff1a;跨场景实时翻译解决方案的技术实践与应用指南 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr/Translumo 语言障…...

C语言完美演绎6-19

/* 范例&#xff1a;6-19 */#include <stdio.h>void main(){for(int a 1,sum0;a<10;sum suma,a)/*将所有的条件写入*/; }...

新手零失败指南:在快马平台跟做交互式openclaw安装教程

最近在折腾一个叫openclaw的工具&#xff0c;作为新手被各种依赖和报错折磨得够呛。后来发现用InsCode(快马)平台可以把这个过程变成交互式教程&#xff0c;特别适合像我这样刚入门的小白。这里把踩坑经验整理成笔记&#xff0c;手把手带你零失败完成安装。 为什么选择交互式安…...

2026年成都上门回收黄金新趋势:安全便捷更放心

随着经济的发展和人们生活水平的提高&#xff0c;黄金作为一种重要的投资和保值手段&#xff0c;越来越受到人们的青睐。然而&#xff0c;在黄金回收的过程中&#xff0c;用户常常面临诸多痛点&#xff0c;如价格不透明、流程复杂、门店选择困难等。为了解决这些问题&#xff0…...

5分钟搞定!OpenCode+Qwen3-4B本地AI编程助手一键部署教程

5分钟搞定&#xff01;OpenCodeQwen3-4B本地AI编程助手一键部署教程 1. 引言&#xff1a;为什么你需要一个本地AI编程助手&#xff1f; 想象一下这个场景&#xff1a;你正在开发一个核心功能模块&#xff0c;需要快速生成一段复杂的业务逻辑代码。你打开浏览器&#xff0c;准…...