//仿照string完成mystring类
#include <iostream>
#include <cstring>
using namespace std;
class myString
{
private:
char *str;//记录c风格的字符串
int size;//记录字符串的实际长度
public:
//无参构造
myString():size(10)//定义字符串大小
{
str = new char[size];//申请一个字符串的空间
cout<<"无参函数"<<endl;
}
//有参构造
myString(const char *s)//传字符串参数
{
size = strlen(s);
str = new char[size+1];//+1是字符串后带有\0
strcpy(str,s);
cout<<"有参函数"<<endl;
}
//定义展示函数
void show()
{
cout<<"size= "<<size<<endl;//大小
cout<<"str= "<<str<<endl;//内容
}
//拷贝构造
myString(const myString & other)
{
size = other.size;
str = new char[size+1];
strcpy(str,other.str);
cout<<"拷贝构造函数"<<endl;
}
//赋值构造
myString & operator=(const myString &other)
{
if(this != &other)//排除自己给自己赋值的情况
{
strcpy(this->str,other.str);
this->size = other.size;
}
cout<<"赋值构造"<<endl;
return *this;
}
//析构函数
~myString()
{
cout<<"析构函数"<<endl;
delete []str;//对指针空间进行释放
}
//判空函数
bool empty()
{
if(size==0)
{
return true;
}
else
return false;
}
//size函数
int len()
{
return size;
}
//c_str函数
char *c_str()
{
return str;
}
//at函数
char &at(int buf)
{
if(buf < 0 || buf>= size)
{
cout<<"输入错误"<<endl;
}
else
return str[buf];
}
//重构+
const myString operator+(const myString &R)const
{
myString temp;
temp.size = this->size+R.size;
temp.str = strcat(this->str,R.str);
return temp;
}
//成员函数版实现关系运算符 >
bool operator>(const myString &R)const
{
if(this->size>R.size && this->str > R.str)
{
return 1;
}
return 0;
}
//[]运算符
};
int main()
{
// myString s1;//无参构造
myString s2("abcde");//有参函数
// s2.show();
// myString s3(s2);//拷贝构造函数
// s3.show();
myString s4("hqyjsh");//有参函数
//s2.show();
// myString s5=s2; //调用拷贝构造
// s5=s4; //调用赋值构造
// cout<<"s2.empty()="<<s2.empty()<<endl;
// s5.show();
// cout<<"s5.len="<< s5.len()<<endl;
// cout<<"s5.at(3)="<< s5.at(3) <<endl;
//+
myString s6;
s6=s2+s4;
s6.show();
if(s2>s6)
{
cout<<"yes"<<endl;
}
else
{
cout<<"no"<<endl;
}
return 0;
}
【在myString上进行运算符的重载】
最新推荐文章于 2024-08-16 16:51:12 发布