cpp
#include <iostream>
#include <cstring>
using namespace std;
class myString
{
private:
char *str;
int size;
public:
//无参构造
myString():size(10)
{
str = new char[10];
strcpy(str,"");
}
//有参构造
myString(const char *s)
{
size = strlen(s);
str = new char[size+1];
strcpy(str,s);
}
//拷贝构造
myString(const myString& other)
{
size = other.size;
str = new char[size + 1];
strcpy(str, other.str);
}
//析构函数
~myString()
{
delete[] str;
}
//拷贝赋值
myString& operator=(const myString& other)
{
if (this != &other)
{
delete[] str;
size = other.size;
str = new char[size + 1];
strcpy(str, other.str);
}
return *this;
}
//加号重载
myString operator+(const myString& other) const
{
myString temp;
temp.size = this->size + other.size;
temp.str = new char[temp.size + 1];
strcpy(temp.str, this->str);
strcat(temp.str, other.str);
return temp;
}
//加等于重载
myString& operator+=(const myString& other)
{
char* temp = new char[size + other.size + 1];
strcpy(temp, str);
strcat(temp, str);
delete[] str;
str = temp;
size += other.size;
return *this;
}
//关系运算符>重载
bool operator>(const myString& other) const
{
return strcmp(str, other.str)>0;
}
//c_str函数
const char* c_str() const
{
return str;
}
//at函数
char& at(int pos)
{
if (pos >= 0 && pos < size)
{
return str[pos];
}
else
{
cout << "位置不合法" << endl;
return str[0];
}
}
//中括号运算符重载
char& operator[](int pos)
{
return at(pos);
}
//重载函数设置成友元
friend ostream &operator<<(ostream &out, const myString &c);
};
ostream &operator<<(ostream &out, const myString &c)
{
cout<<c.c_str()<<"宇宙第一"<<endl;
return out;
}
int main()
{
myString s1("hello");
cout<<s1.c_str();
cout<<s1;
myString s2("world");
myString s3;
s3 = s1+" "+s2;
cout<<s3;
return 0;
}