class String
{
private:
char *data;
public:
//可以充当默认构造函数
String(const char *p = nullptr)
{
if (p == nullptr)
{
data = nullptr;
}
else
{
data = new char[strlen(p) + 1];
strcpy(data, p);
}
}
~String()
{
delete[] data;
}
//拷贝构造函数
String(const String &a)
{
if (a.data == nullptr)
{
data = nullptr;
}
else
{
data = new char[strlen(a.data) + 1];
strcpy(data, a.data);
}
}
//重载赋值运算符
String &operator=(const String &a)
{
if (this != &a)
{
if (data != nullptr)
{
delete[] data;
data = nullptr;
}
}
data = new char[strlen(a.data) + 1];
strcpy(data, a.data);
return *this;
}
//重载+运算符
//注意不要返回String &
String operator+(String &a)
{
//左边为空
if (data == nullptr)
{
data = new char[strlen(a.data) + 1];
strcpy(data, a.data);
return *this;
}
//左边不为空
String temp;
temp.data = new char[strlen(data) + strlen(a.data) + 1];
strcpy(temp.data, data);
strcat(temp.data, a.data);
delete[] data;
data = nullptr;
return temp;
}
//重载==
bool operator==(String &a)
{
if (strcmp(data, a.data) == 0)
{
return true;
}
return false;
}
//重载[]
char operator[](int index)
{
return data[index];
}
//重载输出,要加fiend友元函数
friend ostream &operator<<(ostream &os, const String &str)
{
os << str.data;
return os;
}
//重载输入,要加fiend友元
//这里不相同
/*
friend istream &operator>>(istream &is, String &str)
{
char buf[4096];
is >> buf;
str.data = buf;
return is;
}
*/
};
int main()
{
String str;
str = "luochao";
cout << str << endl;
char a = str[1];
cout << "luochao" << endl;
return 0;
}
手写string类-class
于 2022-03-08 22:52:20 首次发布