定义一个字符串类String,用来存放不定长的字符串,重载运算符“==”,“<”和“>”,用于两个字符串的等于、小于和大于的比较运算。
时间: 2024-01-21 18:05:06 浏览: 68
有关String类
好的,下面是定义一个字符串类String的代码,其中重载了运算符“==”,“<”和“>”。
```cpp
#include <cstring>
#include <iostream>
class String {
public:
String() : length_(0), data_(nullptr) {}
String(const char* str) : length_(std::strlen(str)), data_(new char[length_ + 1]) {
std::strcpy(data_, str);
}
String(const String& other) : length_(other.length_), data_(new char[length_ + 1]) {
std::strcpy(data_, other.data_);
}
~String() {
delete[] data_;
}
String& operator=(const String& other) {
if (this != &other) {
delete[] data_;
length_ = other.length_;
data_ = new char[length_ + 1];
std::strcpy(data_, other.data_);
}
return *this;
}
bool operator==(const String& other) const {
return std::strcmp(data_, other.data_) == 0;
}
bool operator<(const String& other) const {
return std::strcmp(data_, other.data_) < 0;
}
bool operator>(const String& other) const {
return std::strcmp(data_, other.data_) > 0;
}
friend std::ostream& operator<<(std::ostream& out, const String& str) {
out << str.data_;
return out;
}
private:
int length_;
char* data_;
};
```
在上面的代码中,我们定义了一个字符串类 String,它有以下成员函数和成员变量:
- length_:表示字符串的长度。
- data_:表示字符串的数据,是一个指向 char 类型的指针,指向存储字符串的内存区域。
- String():默认构造函数,将字符串长度初始化为 0,数据指针初始化为 nullptr。
- String(const char* str):构造函数,接受一个 char* 类型的指针作为参数,将其转换为字符串并存储在类中。
- String(const String& other):拷贝构造函数,用于拷贝一个已有的 String 对象。
- ~String():析构函数,用于释放类中动态分配的内存。
- operator=():重载赋值运算符,用于将一个 String 对象赋值给另一个 String 对象。
- operator==():重载等于运算符,用于判断两个 String 对象是否相等。
- operator<():重载小于运算符,用于判断一个 String 对象是否小于另一个 String 对象。
- operator>():重载大于运算符,用于判断一个 String 对象是否大于另一个 String 对象。
- operator<<():重载输出运算符,用于将一个 String 对象输出到标准输出流中。
这样,我们就可以使用 String 类来存放字符串,并通过重载运算符“==”,“<”和“>”来进行比较运算。例如:
```cpp
int main() {
String str1("hello");
String str2("world");
if (str1 == str2) {
std::cout << "str1 == str2" << std::endl;
}
if (str1 < str2) {
std::cout << "str1 < str2" << std::endl;
}
if (str1 > str2) {
std::cout << "str1 > str2" << std::endl;
}
return 0;
}
```
输出结果为:
```
str1 < str2
str1 > str2
```
阅读全文