定义自己的string类mystring,需要重载+=,=和[]
时间: 2023-06-16 22:05:40 浏览: 89
自定义string类
好的,下面是一个简单的示例代码实现:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
class mystring {
private:
char* data;
int length;
public:
mystring() {
data = nullptr;
length = 0;
}
mystring(const char* str) {
length = strlen(str);
data = new char[length+1];
strcpy(data, str);
}
mystring(const mystring& str) {
length = str.length;
data = new char[length+1];
strcpy(data, str.data);
}
~mystring() {
if (data != nullptr) delete[] data;
}
mystring& operator=(const mystring& str) {
if (this == &str) return *this;
if (data != nullptr) delete[] data;
length = str.length;
data = new char[length+1];
strcpy(data, str.data);
return *this;
}
mystring& operator+=(const char* str) {
int len = strlen(str);
char* temp = new char[length+len+1];
strcpy(temp, data);
strcat(temp, str);
if (data != nullptr) delete[] data;
data = temp;
length += len;
return *this;
}
mystring& operator+=(const mystring& str) {
char* temp = new char[length+str.length+1];
strcpy(temp, data);
strcat(temp, str.data);
if (data != nullptr) delete[] data;
data = temp;
length += str.length;
return *this;
}
char& operator[](int index) {
return data[index];
}
const char& operator[](int index) const {
return data[index];
}
friend ostream& operator<<(ostream& os, const mystring& str) {
os << str.data;
return os;
}
};
int main() {
mystring str1("Hello");
mystring str2("World");
str1 += "!";
str1 += str2;
cout << str1 << endl;
cout << str1[0] << endl;
return 0;
}
```
在上述代码中,定义了一个`mystring`类,实现了默认构造函数、带`char*`参数的构造函数、拷贝构造函数、析构函数、赋值重载函数、`+=`重载函数、`[]`重载函数和输出流重载函数。其中,`+=`重载函数重载了`char*`和`mystring`两种类型的参数,`[]`重载函数实现了访问字符串中某个字符的功能。在主函数中,创建了两个`mystring`对象,分别为`str1`和`str2`,通过`+=`重载函数实现了字符串的拼接,最后通过`[]`重载函数输出了字符串中的第一个字符。
阅读全文