赋值运算符(=)重载:允许将一个字符串指针直接赋值给一个 CSimpleString 对象,也允许将一个 CSimpleString 对象赋值给另一个 CSimpleString 对象;字符串连接(+、+=):允许将一个 CSimpleString 对象和一个字符串指针 相加(连接),也允许将一个 CSimpleString 对象和另一个 CSimpleString 相加(连接);字符串比较(<, >, ==)允许比较两个 CSimpleString 对象的大小,返回值 即为两个对象分别封装的字符串的之间大小。(提示:用友员函数实现)
时间: 2024-01-23 07:04:16 浏览: 94
好的,你的问题是如何在 C++ 中实现 CSimpleString 类的赋值运算符、字符串连接和字符串比较的重载操作,我了解了。
首先,让我们来看看如何重载赋值运算符(=):
```c++
class CSimpleString {
public:
CSimpleString(); // 构造函数
CSimpleString(const char* str); // 带参数的构造函数
CSimpleString(const CSimpleString& rhs); // 拷贝构造函数
~CSimpleString(); // 析构函数
CSimpleString& operator=(const char* str); // 重载赋值运算符,将一个字符串指针直接赋值给一个 CSimpleString 对象
CSimpleString& operator=(const CSimpleString& rhs); // 重载赋值运算符,将一个 CSimpleString 对象赋值给另一个 CSimpleString 对象
private:
char* m_pData; // 字符串数据
};
CSimpleString& CSimpleString::operator=(const char* str) {
if (this == &str) { // 自我赋值检查
return *this;
}
delete[] m_pData; // 释放原有内存
m_pData = nullptr;
if (str) {
int len = strlen(str);
m_pData = new char[len + 1];
strcpy(m_pData, str);
}
return *this;
}
CSimpleString& CSimpleString::operator=(const CSimpleString& rhs) {
if (this == &rhs) { // 自我赋值检查
return *this;
}
delete[] m_pData; // 释放原有内存
m_pData = nullptr;
if (rhs.m_pData) {
int len = strlen(rhs.m_pData);
m_pData = new char[len + 1];
strcpy(m_pData, rhs.m_pData);
}
return *this;
}
```
接下来,让我们看看如何重载字符串连接(+、+=):
```c++
class CSimpleString {
public:
CSimpleString(); // 构造函数
CSimpleString(const char* str); // 带参数的构造函数
CSimpleString(const CSimpleString& rhs); // 拷贝构造函数
~CSimpleString(); // 析构函数
CSimpleString operator+(const char* str) const; // 重载字符串连接,将一个 CSimpleString 对象和一个字符串指针 相加(连接)
CSimpleString operator+(const CSimpleString& rhs) const; // 重载字符串连接,将一个 CSimpleString 对象和另一个 CSimpleString 相加(连接)
CSimpleString& operator+=(const char* str); // 重载字符串连接,将一个 CSimpleString 对象和一个字符串指针 相加(连接)
CSimpleString& operator+=(const CSimpleString& rhs); // 重载字符串连接,将一个 CSimpleString 对象和另一个 CSimpleString 相加(连接)
private:
char* m_pData; // 字符串数据
};
CSimpleString CSimpleString::operator+(const char* str) const {
CSimpleString newStr(*this);
newStr += str;
return newStr;
}
CSimpleString CSimpleString::operator+(const CSimpleString& rhs) const {
CSimpleString newStr(*this);
newStr += rhs;
return newStr;
}
CSimpleString& CSimpleString::operator+=(const char* str) {
if (str) {
int len1 = strlen(m_pData);
int len2 = strlen(str);
char* newData = new char[len1 + len2 + 1];
strcpy(newData, m_pData);
strcat(newData, str);
delete[] m_pData;
m_pData = newData;
}
return *this;
}
CSimpleString& CSimpleString::operator+=(const CSimpleString& rhs) {
if (rhs.m_pData) {
int len1 = strlen(m_pData);
int len2 = strlen(rhs.m_pData);
char* newData = new char[len1 + len2 + 1];
strcpy(newData, m_pData);
strcat(newData, rhs.m_pData);
delete[] m_pData;
m_pData = newData;
}
return *this;
}
```
最后,让我们看看如何重载字符串比较(<, >, ==):
```c++
class CSimpleString {
public:
CSimpleString(); // 构造函数
CSimpleString(const char* str); // 带参数的构造函数
CSimpleString(const CSimpleString& rhs); // 拷贝构造函数
~CSimpleString(); // 析构函数
bool operator<(const CSimpleString& rhs) const; // 重载字符串比较,判断两个 CSimpleString 对象的大小,返回值 即为两个对象分别封装的字符串的之间大小
bool operator>(const CSimpleString& rhs) const; // 重载字符串比较,判断两个 CSimpleString 对象的大小,返回值 即为两个对象分别封装的字符串的之间大小
bool operator==(const CSimpleString& rhs) const; // 重载字符串比较,判断两个 CSimpleString 对象的大小,返回值 即为两个对象分别封装的字符串的之间大小
private:
char* m_pData; // 字符串数据
};
bool CSimpleString::operator<(const CSimpleString& rhs) const {
return strcmp(m_pData, rhs.m_pData) < 0;
}
bool CSimpleString::operator>(const CSimpleString& rhs) const {
return strcmp(m_pData, rhs.m_pData) > 0;
}
bool CSimpleString::operator==(const CSimpleString& rhs) const {
return strcmp(m_pData, rhs.m_pData) == 0;
}
```
希望这些代码可以对你有所帮助!
阅读全文