设计字符串类 定义各种构造函数并实现重载+(链接)==相等 < []
时间: 2024-05-21 18:10:16 浏览: 55
string 类实现,构造函数、析构函数、操作符重载等
class MyString {
private:
char* str; // 字符串指针
public:
// 默认构造函数
MyString() {
str = new char[1];
str[0] = '\0';
}
// 传入C风格字符串的构造函数
MyString(const char* s) {
str = new char[strlen(s) + 1];
strcpy(str, s);
}
// 拷贝构造函数
MyString(const MyString& other) {
str = new char[strlen(other.str) + 1];
strcpy(str, other.str);
}
// 移动构造函数
MyString(MyString&& other) {
str = other.str;
other.str = nullptr;
}
// 析构函数
~MyString() {
delete[] str;
}
// 重载赋值运算符
MyString& operator=(const MyString& other) {
if (this != &other) {
delete[] str;
str = new char[strlen(other.str) + 1];
strcpy(str, other.str);
}
return *this;
}
// 重载移动赋值运算符
MyString& operator=(MyString&& other) {
if (this != &other) {
delete[] str;
str = other.str;
other.str = nullptr;
}
return *this;
}
// 重载相等运算符
bool operator==(const MyString& other) const {
return strcmp(str, other.str) == 0;
}
// 重载小于运算符
bool operator<(const MyString& other) const {
return strcmp(str, other.str) < 0;
}
// 重载大于运算符
bool operator>(const MyString& other) const {
return strcmp(str, other.str) > 0;
}
// 重载下标运算符
char& operator[](int index) {
return str[index];
}
// 重载加法运算符
MyString operator+(const MyString& other) const {
MyString result;
delete[] result.str;
result.str = new char[strlen(str) + strlen(other.str) + 1];
strcpy(result.str, str);
strcat(result.str, other.str);
return result;
}
// 重载输出运算符
friend std::ostream& operator<<(std::ostream& os, const MyString& obj) {
os << obj.str;
return os;
}
};
阅读全文