完善自定义字符串类mystring,函数包括构造函数、复制构造函数、析构函数,并重载“[ ]”、”=” 、“+”(连接)、“<”、“>”、“==”(比较)。
时间: 2023-10-26 08:04:49 浏览: 115
string 类实现,构造函数、析构函数、操作符重载等
好的,我可以为您进一步完善MyString类。在此基础上,我添加了重载运算符“[]”、“<”、“>”和“==”,并修改了重载运算符“+”和“=”的实现。
```C++
#include <cstring>
#include <iostream>
class MyString {
public:
MyString() {
m_data = nullptr;
m_size = 0;
}
MyString(const char* str) {
m_size = strlen(str);
m_data = new char[m_size + 1];
strcpy(m_data, str);
}
MyString(const MyString& other) {
m_size = other.m_size;
m_data = new char[m_size + 1];
strcpy(m_data, other.m_data);
}
~MyString() {
if (m_data != nullptr) {
delete[] m_data;
m_data = nullptr;
}
}
char& operator[](int index) {
return m_data[index];
}
const char& operator[](int index) const {
return m_data[index];
}
MyString& operator=(const MyString& other) {
if (this == &other) {
return *this;
}
if (m_data != nullptr) {
delete[] m_data;
m_data = nullptr;
}
m_size = other.m_size;
m_data = new char[m_size + 1];
strcpy(m_data, other.m_data);
return *this;
}
MyString operator+(const MyString& other) const {
MyString newString;
newString.m_size = m_size + other.m_size;
newString.m_data = new char[newString.m_size + 1];
strcpy(newString.m_data, m_data);
strcat(newString.m_data, other.m_data);
return newString;
}
MyString& operator+=(const MyString& other) {
m_size += other.m_size;
char* new_data = new char[m_size + 1];
strcpy(new_data, m_data);
strcat(new_data, other.m_data);
if (m_data != nullptr) {
delete[] m_data;
m_data = nullptr;
}
m_data = new_data;
return *this;
}
bool operator<(const MyString& other) const {
return strcmp(m_data, other.m_data) < 0;
}
bool operator>(const MyString& other) const {
return strcmp(m_data, other.m_data) > 0;
}
bool operator==(const MyString& other) const {
return strcmp(m_data, other.m_data) == 0;
}
private:
char* m_data;
int m_size;
};
```
以上是完善后的MyString类的设计,包括构造函数、复制构造函数、析构函数和重载运算符“[]”、“<”、“>”和“==”,以及修改后的重载运算符“+”和“=”。如果您有其他问题,请随时问我!
阅读全文