1/13+2

运算符重载

myString.h
#ifndef MYSTRING_H
#define MYSTRING_H
#include <cstring>
#include <iostream>
using namespace std;
class myString
{private:char *str;          //记录c风格的字符串int size;            //记录字符串的实际长度int capacity;           //记录字符串的容量public://无参构造myString():size(10), capacity(10){str = new char[size];         //构造出一个长度为10的字符串}//有参构造myString(const char *s);              //有参构造     string  s("hello wirld");//有参构造myString(int n, char ch);                //string   s(5, 'A');//析构函数~myString();void show();//拷贝构造函数myString(const myString &other);//拷贝赋值函数myString& operator=(const myString &other);//判空函数bool empty() const;//size函数int getSize() const;//c_str函数const char* c_str() const;//at函数char &at(int index);//二倍扩容void resize(int newCapacity);//实现+=运算符重载myString& operator+=(const myString &other);//取地址运算符重载myString* operator&();//将[]运算符重载char& operator[](const int index);////将+重载myString& operator+(const myString &other);//将==重载bool operator==(const myString &other) const;//将!=重载bool operator!=(const myString &other) const;//将>重载bool operator>(const myString &other) const;//将<重载bool operator<(const myString &other) const;//将>=重载bool operator>=(const myString &other) const;//将<=重载bool operator<=(const myString &other) const;// 友元函数,重载<<运算符friend ostream& operator<<(ostream &os, const myString &s){os << s.str;return os;}// 友元函数,重载>>运算符friend istream& operator>>(istream &is, const myString &s){is>> s.str;return is;}
};
#endif // MYSTRING_H

myString.cpp

#include"myString.h"
//有参构造
myString::myString(const char *s)
{if(s){size=strlen(s);capacity=size+1;str=new char[size];strcpy(str, s);}else {size = 0;capacity = 10;str = new char[size];}
}
//有参构造
myString::myString(int n, char ch): size(n), capacity(n + 1)
{str = new char[size];memset(str, ch, n);
}
//析构函数
myString::~myString()
{delete[]str;
}void myString::show()
{cout<<"字符串为:"<<this->str<<endl;
}
//拷贝构造函数
myString::myString(const myString &other): size(other.size), capacity(other.capacity)
{str = new char[size];strcpy(str, other.str);
}
//拷贝赋值函数
myString &myString::operator=(const myString &other)
{if (this != &other){delete[] str;size = other.size;capacity = other.capacity;str = new char[size];strcpy(str, other.str);}return *this;
}
//判空函数
bool myString::empty() const
{return size == 0;
}
//size函数
int myString::getSize() const
{return size;
}
// c_str函数
const char *myString::c_str() const
{return str;
}
// at函数
char &myString::at(int index)
{if (empty()||index < 0 || index >= size){cout<<"访问元素失败"<<endl;}return str[index];
}
//二倍扩容
void myString::resize(int newCapacity)
{char *newStr = new char[newCapacity];strcpy(newStr, str);delete[] str;str = newStr;capacity = newCapacity;
}
//实现+=运算符重载
myString &myString::operator+=(const myString &other)
{int newSize = size + other.size;if (newSize >= capacity) {resize(newSize * 2);}strcat(str, other.str);size = newSize;return *this;
}
//取地址运算符重载
myString *myString::operator&()
{return this;
}
//将[]运算符重载
char &myString::operator[](const int index)
{if(index<0||index>=size){cout<<"重载失败"<<endl;}return str[index];
}
//将+重载
myString &myString::operator+(const myString &other)
{int newSize=size+other.size;if (newSize >= capacity) {resize(newSize * 2);}strcpy(this->str,str);strcat(this->str,other.str);return *this;
}//将==重载
bool myString::operator==(const myString &other) const
{return strcmp(str,other.str)==0;
}
//将!=重载
bool myString::operator!=(const myString &other) const
{return strcmp(str,other.str)!=0;
}
//将>重载
bool myString::operator>(const myString &other) const
{return strcmp(str,other.str)>0;
}
//将<重载
bool myString::operator<(const myString &other) const
{return strcmp(str,other.str)<0;
}
//将>=重载
bool myString::operator>=(const myString &other) const
{return strcmp(str,other.str)>=0;
}
//将<=重载
bool myString::operator<=(const myString &other) const
{return strcmp(str,other.str)<=0;
}

main.cpp

#include"myString.h"int main()
{myString s1("Hello");myString s2(" World");s1 += s2;s1.show();       // 输出 "Hello World"cout << "size: " << s1.getSize() << endl;  // 输出 "Size: 11"cout<<s1[0]<<endl;myString s3=s1+s2;s3.show();myString s4("aaaaa");myString s5("bbbbb");if(s4==s5){cout<<"yes"<<endl;}else{cout<<"no"<<endl;}if(s4!=s5){cout<<"yes"<<endl;}else{cout<<"no"<<endl;}if(s4>s5){cout<<"yes"<<endl;}else{cout<<"no"<<endl;}if(s4<s5){cout<<"yes"<<endl;}else{cout<<"no"<<endl;}if(s4>=s5){cout<<"yes"<<endl;}else{cout<<"no"<<endl;}if(s4<=s5){cout<<"yes"<<endl;}else{cout<<"no"<<endl;}myString s6;cin>>s6;s6.show();return 0;
}

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

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

相关文章

04.计算机体系三层结构与优化(操作系统、计算机网络、)

3.计算机体系三层结构与优化&#xff08;day04&#xff09; 3.1 操作系统 内容概要&#xff1a; 操作系统的发展史&#xff1a;批处理系统》分时操作系统》unix>linux多道技术》&#xff08;进程、线程&#xff09;并发进程与线程相关概念任务运行的三种状态&#xff1a;…

【HM-React】08. Layout模块

基本结构和样式reset 结构创建 实现步骤 打开 antd/Layout 布局组件文档&#xff0c;找到示例&#xff1a;顶部-侧边布局-通栏拷贝示例代码到我们的 Layout 页面中分析并调整页面布局 代码实现 pages/Layout/index.js import { Layout, Menu, Popconfirm } from antd impor…

计算机视觉算法实战——实时车辆检测和分类(主页有相关源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​​​​​​​​​​​​​​​​ 1. 领域介绍✨✨ 实时车辆检测和分类是计算机视觉中的一个重要应用领域&#xff0c;旨在从视频流或…

使用 selenium-webdriver 开发 Web 自动 UI 测试程序

优缺点 优点 有时候有可能一个改动导致其他的地方的功能失去效果&#xff0c;这样使用 Web 自动 UI 测试程序可以快速的检查并定位问题&#xff0c;节省大量的人工验证时间 缺点 增加了维护成本&#xff0c;如果功能更新过快或者技术更新过快&#xff0c;维护成本也会随之提高…

性能测试工具Jmeter分布式运行

性能测试工具JMeter的分布式执行是一种用于增强压力测试能力的技术方案&#xff0c;它允许用户通过多台机器来共同完成同一个测试计划的执行。这种方式特别适用于需要模拟成百上千甚至上万用户并发访问的情况&#xff0c;当单台机器由于硬件资源&#xff08;如CPU、内存、网络I…

弥散张量分析开源软件 DSI Studio 简体中文汉化版可以下载了

网址&#xff1a; (63条消息) DSIStudio简体中文汉化版(2022年7月)-算法与数据结构文档类资源-CSDN文库

移动云自研云原生数据库入围国采!

近日&#xff0c;中央国家机关2024年度事务型数据库软件框架协议联合征集采购项目产品名单正式公布&#xff0c;移动云自主研发的云原生数据库产品顺利入围。这一成就不仅彰显了移动云在数据库领域深耕多年造就的领先技术优势&#xff0c;更标志着国家权威评审机构对移动云在数…

在vscode中使用R-1

参考我的上一篇博客&#xff1a; https://blog.csdn.net/weixin_62528784/article/details/145092632?spm1001.2014.3001.5501 这篇内容实际上就是上一篇博客的后续承接&#xff0c;既然都在vscode的jupyter中使用R了&#xff0c;实际上其实也能够直接在vscode中原生使用R的编…

【Block总结】掩码窗口自注意力 (M-WSA)

摘要 论文链接&#xff1a;https://arxiv.org/pdf/2404.07846 论文标题&#xff1a;Transformer-Based Blind-Spot Network for Self-Supervised Image Denoising Masked Window-Based Self-Attention (M-WSA) 是一种新颖的自注意力机制&#xff0c;旨在解决传统自注意力方法在…

【Linux】统信UOS服务器安装MySQL8.0(RPM)

目录 一、下载安装包 二、安装MySQL 2.1hive适配 2.2ranger适配 3.2DolphinScheduler适配 一、下载安装包 官网下载安装包&#xff1a;MySQL :: MySQL Downloads 选择社区版本下载 点击MySQL Community Server 选择对应系统的MySQL版本号 统信1060a 操作系统对应 redhat8…

小白:react antd 搭建框架关于 RangePicker DatePicker 时间组件使用记录 2

文章目录 一、 关于 RangePicker 组件返回的moment 方法示例 一、 关于 RangePicker 组件返回的moment 方法示例 moment方法中日后开发有用的方法如下&#xff1a; form.getFieldsValue().date[0].weeksInWeekYear(),form.getFieldsValue().date[0].zoneName(), form.getFiel…

Jenkins简单的安装运行

一、下载 官网下载&#xff1a;https://www.jenkins.io/download/ 清华大学开源软件镜像站&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/jenkins/ 官网资料丰富&#xff0c;介绍了各种平台安装以及下载。安装简单&#xff0c;按照说明来就行。下面我介绍一个非常简单的…

【CSS】HTML页面定位CSS - position 属性 relative 、absolute、fixed 、sticky

目录 relative 相对定位 absolute 绝对定位 fixed 固定定位 sticky 粘性定位 position&#xff1a;relative 、absolute、fixed 、sticky &#xff08;四选一&#xff09; top&#xff1a;距离上面的像素 bottom&#xff1a;距离底部的像素 left&#xff1a;距离左边的像素…

网络安全 | WAF防护开通流程与技术原理详解

关注&#xff1a;CodingTechWork 引言 随着互联网安全形势的日益严峻&#xff0c;Web应用防火墙&#xff08;WAF, Web Application Firewall&#xff09;逐渐成为网站和应用的标准防护措施。WAF能够有效识别和防止如SQL注入、跨站脚本攻击&#xff08;XSS&#xff09;、恶意流…

小结:路由器和交换机的指令对比

路由器和交换机的指令有一定的相似性&#xff0c;但也有明显的区别。以下是两者指令的对比和主要差异&#xff1a; 相似之处 基本操作 两者都支持类似的基本管理命令&#xff0c;比如&#xff1a; 进入系统视图&#xff1a;system-view查看当前配置&#xff1a;display current…

Ubuntu中双击自动运行shell脚本

方法1: 修改文件双击反应 参考: https://blog.csdn.net/miffywm/article/details/103382405 chmod x test.sh鼠标选中待执行文件&#xff0c;在窗口左上角edit菜单中选择preference设计双击执行快捷键&#xff0c;如下图&#xff1a; 方法2: 设置一个应用 参考: https://blo…

从0开始学习搭网站的第一天

前言&#xff0c;以下内容学习自mdn社区&#xff0c;感兴趣的朋友可以直接去看原文章web技术 目录 web机制互联网是怎么运作的网站服务器是什么什么是URL&#xff1f;什么是web服务器&#xff1f;什么是域名什么是超链接什么是网页DOMgoole浏览器开发者工具 web机制 互联网是怎…

java小灶课详解:关于char和string的区别和对应的详细操作

char和string的区别与操作详解 在编程语言中&#xff0c;char和string是用于处理字符和字符串的两种重要数据类型。它们在存储、操作和应用场景上存在显著差异。本文将从以下几个方面详细解析两者的区别及常见操作。 1. 基本定义与存储差异 char&#xff1a; 定义&#xff1a;…

黑马linux笔记(03)在Linux上部署各类软件 MySQL5.7/8.0 Tomcat(JDK) Nginx RabbitMQ

文章目录 实战章节&#xff1a;在Linux上部署各类软件tar -zxvf各个选项的含义 为什么学习各类软件在Linux上的部署 一 MySQL数据库管理系统安装部署【简单】MySQL5.7版本在CentOS系统安装MySQL8.0版本在CentOS系统安装MySQL5.7版本在Ubuntu&#xff08;WSL环境&#xff09;系统…

[Transformer] The Structure of GPT, Generative Pretrained Transformer

The Structure of Generative Pretrained Transformer Reference: The Transformer architecture of GPT models How GPT Models Work