2218定义一个字符串类string,用来存放不定长的字符串,重载运算符“= =”、“<”和“>
时间: 2023-11-22 20:05:06 浏览: 86
下面是一个简单的字符串类 string 的定义,其中包含了重载运算符“==”、“<”和“>”:
```cpp
class string {
public:
string() : data(nullptr), length(0) {} // 默认构造函数
string(const char* str) : data(nullptr), length(0) { // 构造函数,初始化字符串
if (str != nullptr) {
length = strlen(str);
data = new char[length + 1];
strcpy(data, str);
}
}
string(const string& other) : data(nullptr), length(other.length) { // 拷贝构造函数
if (other.data != nullptr) {
data = new char[length + 1];
strcpy(data, other.data);
}
}
~string() { // 析构函数
if (data != nullptr) {
delete[] data;
data = nullptr;
length = 0;
}
}
string& operator=(const char* str) { // 重载运算符“=”
if (data != nullptr) {
delete[] data;
data = nullptr;
length = 0;
}
if (str != nullptr) {
length = strlen(str);
data = new char[length + 1];
strcpy(data, str);
}
return *this;
}
string& operator=(const string& other) { // 重载运算符“=”
if (this == &other) {
return *this;
}
if (data != nullptr) {
delete[] data;
data = nullptr;
length = 0;
}
if (other.data != nullptr) {
length = other.length;
data = new char[length + 1];
strcpy(data, other.data);
}
return *this;
}
bool operator==(const string& other) const { // 重载运算符“==”
if (length != other.length) {
return false;
}
return strcmp(data, other.data) == 0;
}
bool operator<(const string& other) const { // 重载运算符“<”
return strcmp(data, other.data) < 0;
}
bool operator>(const string& other) const { // 重载运算符“>”
return strcmp(data, other.data) > 0;
}
private:
char* data; // 存放字符串的指针
size_t length; // 字符串的长度
};
```
在上面的代码中,我们使用了动态内存分配来存放字符串。在构造函数和拷贝构造函数中,我们使用了 strcpy 函数来将字符串拷贝到内存中。在重载运算符“=”中,我们先将原来的字符串释放掉,再根据传入的参数重新分配内存和拷贝字符串。在重载运算符“==”、“<”和“>”中,我们使用了 strcmp 函数来比较两个字符串的大小关系。
阅读全文