1/13+2

ops/2025/1/18 4:26:48/

运算符重载

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.ppmy.cn/ops/150995.html

相关文章

Gateway怎么实现限流的

Gateway怎么实现限流的 在API网关&#xff08;如Spring Cloud Gateway、Kong、Nginx等&#xff09;中实现限流是为了控制服务请求的频率&#xff0c;从而避免系统过载&#xff0c;确保稳定性和可用性。限流可以通过多种策略实现&#xff0c;常见的方法包括基于请求次数、时间窗…

EasyExcel的应用

一、简单使用 引入依赖&#xff1a; 这里我们可以使用最新的4.0.2版本&#xff0c;也可以选择之前的稳定版本&#xff0c;3.1.x以后的版本API大致相同&#xff0c;新的版本也会向前兼容&#xff08;3.1.x之前的版本&#xff0c;部分API可能在高版本被废弃&#xff09;&…

【MySQL】高级查询技巧 JOIN、GROUP BY、ORDER BY、UNION 应用案列解析

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《MySQL技术精粹》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、MySQL起源 2、MySQL应用场景 二、MySQL高级查询技巧 1、连接查询&am…

npm发布组件(vue3+webpack)

1.初始化Vue项目 vue create my-app 2.本地运行 npm run serve 3.新增目录和文件 1. src/package/index.js 2. src/package/wlz-btn/index.vue 3. src/package/wlz-input/index.vue // src\package\index.js import WlzBtn from "./wlz-btn"; import WlzInput …

海康MV-EB435i立体相机SDK安装(ROS 2)

文章目录 一、简介二、驱动配置小结 一、简介 MV-EB435i相机是一款低成本、小体积、配置全面的立体相机&#xff0c;凭借硬件级的深度图像处理方案&#xff0c;相机可在高性能输出的同时维持低功耗的水平。相机采用海康MV3D SDK&#xff0c;并提供跨平台支持&#xff0c;广泛应…

【MyDB】3-DataManager数据管理 之 4-数据页缓存

【MyDB】3-DataManager数据管理 之 3-数据页管理 页面缓存设计与实现PageImpl页面定义getForCache() 文件中读取页面数据releaseForCache() 驱逐页面AtomicInteger 记录当前打开数据库文件页recoverInsert()和recoverUpdate() 参考资料 本章涉及代码&#xff1a;top/xianghua/m…

工业视觉2-相机选型

工业视觉2-相机选型 一、按芯片类型二、按传感器结构特征三、按扫描方式四、按分辨率大小五、按输出信号六、按输出色彩接口类型 这张图片对工业相机的分类方式进行了总结&#xff0c;具体如下&#xff1a; 一、按芯片类型 CCD相机&#xff1a;采用电荷耦合器件&#xff08;CC…

【PGCCC】PostgreSQL 临时文件的使用

临时文件 某些查询操作&#xff08;例如sort或hash表&#xff09;需要一些内存功能。此内存由运行时配置提供work_mem。 来自官方文档work_mem work_mem (整数) 设置在写入临时磁盘文件之前查询操作&#xff08;例如排序或哈希表&#xff09;使用的基本最大内存量。 请注意&…