#include <iostream>
#include<cstring>
#include<string>
using namespace std;
class myString
{
private:
char *str; //记录C风格的字符串
int size; //记录字符串实际长度
public:
//无参构造
myString():size(10)
{
str=new char[size];//构造出一个长度为10的字符串
strcpy(str,"");
cout<<"myString::无参构造"<<endl;
}
//有参构造
myString(const char *s)
{
size=strlen(s);
str =new char[size+1];
strcpy(str,s);
cout<<"myString::有参构造"<<endl;
}
//拷贝构造
myString(myString &other):str(new char(*(other.str))),size(other.size)
{
strcpy(str,other.str);
cout<<"myString::拷贝构造"<<endl;
}
//拷贝赋值
myString &operator=(const myString &other)
{
if(this!=&other)
{
delete []str;
this->str=new char(*(other.str));
strcpy(str,(other.str));
this->size=other.size;
}
cout<<"myString::拷贝赋值"<<endl;
return *this;
}
//析构函数
~myString()
{
delete []str;
cout<<"myString::析构函数"<<endl;
cout<<"this = "<<this<<endl;
}
//判空函数
bool pankong()
{
if(size==0)
return true;
return false;
}
//size函数
int changdu()
{
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];
}
//
//重载中括号运算符[]
char &operator[](int aaa)
{
for(int i=0;i<size;i++)
{
if(aaa==i)
{
return str[i];
}
}
}
//后赋字符串到结尾+
myString operator+( myString &R)
{
strcat(this->str,R.str);
return *this;
}
//重载运算符==
bool operator==(const myString &R) const
{
if(strcmp(this->str,R.str)==0)
return true;
}
//>运算符重载
bool operator>(const myString &R) const
{
if(strcmp(this->str,R.str)>0)
return true;
}
//<运算符重载
bool operator<(const myString &R) const
{
if(strcmp(this->str,R.str)<0)
return false;
}
//输出<<重载
friend ostream &operator<<(ostream &L, const myString &O); //将<<运算符重载函数设置成友元
//输入>>重载
friend istream &operator>>(istream &L, const myString &O); //将>>运算符重载函数设置成友元
};
ostream &operator<<(ostream &L, const myString &O)
{
L<<O.str;
return L;
}
istream &operator>>(istream &L, const myString &O)
{
L>>O.str;
return L;
}
int main()
{
//有参构造
myString s1("hello world");
cout<<"s1:"<<s1.c_str()<<endl;
//拷贝构造
myString s2=s1;
cout<<"s2:"<<s2.c_str()<<endl;
//判空
cout<<"empty:"<<boolalpha<<s2.pankong()<<endl;
//size函数
cout<<"size:"<<s2.changdu()<<endl;
//c_str函数
cout<<"c_str:"<<s2.c_str()<<endl;
//at函数
cout<<"at(7):"<<s2.at(7)<<endl;
//拷贝赋值
myString s3;
s3=s1;
cout<<"拷贝赋值s3 = "<<s3.c_str()<<endl;
//重载中括号运算符
s1[3]='A';
cout<<"中括号重载后s1 = "<<s1<<endl;
//后赋字符串
s3=s3.operator+(s1);
cout<<"后赋字符串s3 = "<<s3<<endl;
//判断大小
myString s4("nihao");
if(s1>s4)
cout<<"大小判断为true"<<endl;
else if(s1<s4)
cout<<"大小判断为false"<<endl;
else
cout<<"s1=s4"<<endl;
//字符串输入和输出
myString a;
cout<<"请输入字符串a的值>>"<<endl;
cin>>a;
cout<<"a = "<<a<<endl;
return 0;
}
c++ 运算符重载
最新推荐文章于 2024-07-15 21:33:54 发布