C++ 实现运算符重载

news/2024/10/29 7:17:26/

代码:

#include <iostream>
#include <cstring>using namespace std;class myString
{
private:char *str;          //记录c风格的字符串int size;            //记录字符串的实际长度
public://无参构造myString():size(10){str = new char[size];         //构造出一个长度为10的字符串strcpy(str,"");         //赋值为空串}//有参构造myString(const char *s)          //string  s("hello world"){size = strlen(s)+1;str = new char[size];strcpy(str, s);}//拷贝构造myString(char *s,int i):str(new char(*s)),size(i){strcpy(this->str,s);this->size = i;cout<<"拷贝构造函数"<<endl;}//析构函数~myString(){delete str;}//拷贝赋值函数myString &operator = (const myString &other){if(&other != this){this->str = new char[size];memset(str,0,size);strcpy(str,other.str);}return *this;}//判空函数bool empty(){if(strlen(str) == 0)return false;elsereturn true;}//size函数int mysize(){return size;}//c_str函数const char* c_str(){return str;}//at函数char &at(int pos){if(pos>=size || pos<0){cout<<"访问越界"<<endl;}return str[pos];}//加号运算符重载const myString operator+(const myString &s)const{myString m;strcpy(m.str,this->str);strcat(m.str,s.str);m.size = strlen(m.str);return m;}//加等于运算符重载const myString operator+=(const myString &s){strcat(this->str,s.str);this->size = strlen(this->str);return *this;}//关系运算符重载(>)bool operator >(const myString &s)const{if(this->size < s.size){return false;}else{for(int i=0;i<this->size;i++){if(*(this->str+i)<*(s.str+i)){return false;}}}return true;}//中括号运算符重载char & operator[](const int pos)const{if(pos>=size || pos<0){cout<<"访问越界"<<endl;}return *(str+pos);}
};int main(){//展示字符串myString s1("ssssyyyy");myString s2("wwwwhhhh");cout<<s1.c_str()<<"     "<<s2.c_str()<<endl;//重载加法运算符myString s3;cout<<s3.mysize()<<endl;s3=s1+s2;cout<<s3.c_str()<<endl;//at运算cout<<s3.at(3)<<endl;//加等于s3+=s1;cout<<s3.c_str()<<endl;cout<<s3.mysize()<<endl;//关系运算if(s3>s1){cout<<"s3>s1"<<endl;}elsecout<<"s3<s1"<<endl;//中括号cout<<s2[3]<<"     "<<s2[6]<< "     "<<s2[8]<<endl;return 0;
}

 


http://www.ppmy.cn/news/1134477.html

相关文章

记录使用vue-test-utils + jest 在uniapp中进行单元测试

目录 前情安装依赖package.json配置jest配置测试文件目录编写setup.js编写第一个测试文件jest.fn()和jest.spyOn()jest 解析scss失败测试vuex$refs定时器测试函数调用n次手动调用生命周期处理其他模块导入的函数测试插槽 前情 uniapp推荐了测试方案dcloudio/uni-automator&…

tcp拥塞控制原理

18.3 拥塞控制 我们在向对端发送数据时&#xff0c;并不是一股脑子任意发送&#xff0c;因为TCP建立连接后&#xff0c;就是建立了一根管道&#xff0c;这跟管道上&#xff0c;实际上有很多的工作设备&#xff0c;比如路由器和交换机等等&#xff0c;他们都会对接收到的TCP包进…

文件管理:极速复制粘贴,畅享无限次文件管理!

亲爱的用户&#xff0c;您是否经常需要将文件夹里的所有文件进行无限次复制粘贴&#xff0c;但又觉得这个过程繁琐而耗时&#xff1f;现在&#xff0c;我们为您推出一款极速文件管理工具&#xff0c;让您可以轻松实现无限次的文件复制粘贴&#xff0c;让文件管理更加高效畅快&a…

Ajax异步请求(不等待,继续执行)

案例&#xff1a; 1、问题&#xff1a; 以下代码中&#xff0c;if 和 else里面都有以下两句话&#xff0c;能不能把这两句话放在else之后执行&#xff1f; //关闭对话框 this.dialogFormVisible false; //刷新数据 this.list(); save() {//修改和新增显示的是同一个表单,点…

最新SparkAI创作系统V2.6.2/ChatGPT网站系统H5源码+微信公众号版+AI绘画系统源码/支持GPT联网提问/支持Prompt应用

一、AI创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的AI智能问答系统和AI绘画系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图…

ArduPilot开源代码之AP_RangeFinder

ArduPilot开源代码之AP_RangeFinder 1. 源由2. 框架设计2.1 启动代码2.2 任务代码 3. 重要例程3.1 状态更新3.2 传感设备检测 4. 总结5. 参考资料 1. 源由 AP_RangeFinder的应用的主要用途是用于测量对地距离的&#xff0c;这个与大家通常理解的障碍物避障还是有比较大的差异的…

2169 -- 最大公约数题解

问题描述 Description 给定一个长为 �n 的正整数序列 �a,和一个正整数 �k。求出: max⁡i−j≥kmax​{gcd(ai​,aj​)} Input 第一行两个正整数 �n 和 �k; 第二行 �n 个正整数表示序列 �a。 Output 一行一个正整数,表示答案。 Sample Input 5 2 2 6 6 3 5 S…