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

【无标题】无题 面向对象之封装 无语!

 

#include <iostream>
#include<string.h>
using namespace std;
class Mystring
{
private:
//    string str;int size;char *name;
public:
//构造函数Mystring(){name=new char[32];size=32;cout<<"无参构造"<<endl;}Mystring(char *a){name=new char[32];size=32;char nm[128]="";strcpy(nm,a);strcpy(name,nm);cout<<"有参构造"<<endl;}//析构函数~Mystring(){delete name;name=NULL;cout<<"析构函数"<<endl;}
//operator=为字符串赋值函数
Mystring &operator=(const Mystring& a)
{char nm[128]="";strcpy(nm,a.name);strcpy(this->name,nm);return *this;
}
Mystring &operator=(const char* a)
{char nm[128]="";strcpy(nm,a);strcpy(this->name,nm);return *this;
}
void show()
{cout<<"str= "<<this->name<<endl;
}
//at 访问指定字符 有边界检查
char &at(int a)
{if(a>32){cout<<"失败"<<endl;}int b=strlen(name);cout<<"边界值为"<<b-1<<endl;if(a>=b){cout<<"越界"<<endl;return name[a];}return name[a];
}
//operator[]访问指定字符
char &operator[](int a)
{if(a>32){cout<<"失败"<<endl;}int b=strlen(name);cout<<"边界值为"<<b-1<<endl;if(a>=b){cout<<"越界"<<endl;return name[a];}return name[a];
}
//data返回指定字符串首字符的指针
char *data()
{return name;
}
//c_str 返回字符串得不可修改的C字符数组版本
const char  *c_str()const
{return name;
}
//empty检查字符串是否为空
bool empty()
{return strlen(name)==0;
}
//size返回字符串
int sz()
{return strlen(name);
}
//capacity 返回当前对象分配的空间能保存的字符数量
int capacity()
{return size;
}
//clear //清除内容
Mystring & clear()
{for(int i=0;i<size;i++){this->name[i]='\0';}return *this;
}
//push_back 后附字符到结尾
Mystring &push_back(char a)
{int b= strlen(name);name[b]=a;return *this;
}
//pop_back 移除末尾字符
Mystring &pop_back()
{int b=strlen(name);if(b>0){name[b-1]='\0';return *this;}else{cout<<"字符串为空移除失败"<<endl;}return *this;
}
//append 后附字符到结尾
Mystring &append(char* a)
{char arr[128]="";strcpy(arr,a);strcat(name,arr);return *this;
}
//operator+=后附字符到结尾
Mystring &operator+=(const char a)
{int b= strlen(name);name[b]=a;return *this;
}
//operator+链接两个字符串或者或一个字符
Mystring &operator+(char *a)
{char arr[128]="";strcpy(arr,a);strcat(name,arr);return *this;
}
Mystring &operator+(char a)
{int b= strlen(name);name[b]=a;return *this;
}
//operator==比较字符串
bool operator==(const Mystring& a)const
{return  (strcmp(this->name,a.name))==0;
}
bool operator==(const char * a)const
{char buf[128]="";strcpy(buf,a);return  (strcmp(this->name,buf))==0;
}
bool operator!=(const Mystring& a)const
{return  (strcmp(this->name,a.name))!=0;
}
bool operator!=(const char * a)const
{char buf[128]="";strcpy(buf,a);return  (strcmp(this->name,buf))!=0;
}
bool operator>(const Mystring& a)const
{return  (strcmp(this->name,a.name))>0;
}
bool operator>(const char * a)const
{char buf[128]="";strcpy(buf,a);return  (strcmp(this->name,buf))>0;
}
bool operator<(const Mystring& a)const
{return  (strcmp(this->name,a.name))<0;
}
bool operator<(const char * a)const
{char buf[128]="";strcpy(buf,a);return  (strcmp(this->name,buf))<0;
}
bool operator>=(const Mystring& a)const
{return  (strcmp(this->name,a.name))>=0;
}
bool operator>=(const char * a)const
{char buf[128]="";strcpy(buf,a);return  (strcmp(this->name,buf))>=0;
}
bool operator<=(const Mystring& a)const
{return  (strcmp(this->name,a.name))<=0;
}
bool operator<=(const char * a)const
{char buf[128]="";strcpy(buf,a);return  (strcmp(this->name,buf))<=0;
}
friend ostream &operator<<(ostream &L,const Mystring &r);};
ostream &operator<<(ostream &L,const Mystring &r)
{L<<r.name<<endl;return L;
}
int main()
{Mystring s1;s1="hahaha";s1.show();Mystring s2;s2 =s1;s2.show();Mystring s3("haha");s3.show();cout<<s3.at(0)<<endl;char ch=s3[1];cout<<ch<<endl;char *qtr=s3.data();qtr[1]='q';cout<<qtr<<endl;cout<<s3.c_str()<<endl;if(s1.empty()){cout<<"字符串为空"<<endl;}else{cout<<"不空"<<endl;}cout<<"当前字符数量为"<<s3.sz()<<endl;cout<<"最大容纳空间为"<<s3.capacity()<<endl;s3.clear();s3.show();s3.push_back('a');s3.show();s3.pop_back();s3.show();s3.append("nihao");s3.show();s3+='P';s3.show();Mystring s4=s3;if(s3==s4){cout<<"相同"<<endl;}else{cout<<"不相同"<<endl;}if(s3!=s4){cout<<"不相同"<<endl;}else{cout<<"相同"<<endl;}if(s3>s4){cout<<"大于"<<endl;}{cout<<"小于或等于"<<endl;}if(s3<s4){cout<<"小于"<<endl;}else{cout<<"大于或等于"<<endl;}if(s3>=s4){cout<<"大于等于"<<endl;}else{cout<<"小于"<<endl;}if(s3<=s4){cout<<"小于等于"<<endl;}else{cout<<"大于"<<endl;}cout<<s3;return 0;
}

 


http://www.mrgr.cn/news/18217.html

相关文章:

  • 除尘雾炮机的使用成本高吗?
  • 【Java】继承性-方法的重写【主线学习笔记】
  • 2024.9.2 Python,用栈写每日温度,等差数列划分,子串所有可能性,等差数列划分,深度优先搜索解决累加数
  • 【C++】手动实现String类的封装(分文件编译)
  • 【Rust光年纪】化学计算不完全指南:Rust语言库全面解析
  • emmc协议
  • 【计算机网络复习资料】
  • 剪映剪辑影视视频字幕声音批量自动对齐教程
  • 递归 与 dfs 综合练习(四)
  • 中小企业怎么选择MES:专用MES、集成MES和可配置MES
  • 栈和队列
  • SpringBoot链路追踪②:如何集成?
  • 3 指令系统——3.1指令格式
  • 【C语言】通讯录的实现(详解)
  • 储能电站变流器设计与仿真研究(文章复现matlab)
  • 支持函数库功能,支持对接豆包、腾讯混元、Amazon Bedrock等模型供应商,MaxKB v1.5.0版本发布
  • 将多张图片生成一个渐变的效果图
  • ES6中js文件执行顺序
  • 5.数据结构-c/c++二叉树详解(上篇)(遍历方法,完全二叉树)
  • DrissionPage在UOS中使用时浏览器无法链接