请设计一个简单字符串类 (CSimpleString),使 CSimpleString 对象比普通的字符(char)数组更安全、更易于使用。 a) 功能说明:CSimpleString 对一个可变长度字符串(char *)数据进行封装,提供字 符串的存储分配和释放;提供基于字符串数据的通用操作和运算符重载。构造函数和析构函数。CSimpleString 提供 3 种构造函数: 1. 空构造函数:创建一个空字符串对象。 例:CSimpleString str; 2. 接收一个字符串指针(char *)的构造函数:使用一个已知的字符串构造 对象。 例:CSimpleString str(“abc”); 3. 拷贝构造函数:可以用一个 CSimpleString 对象构造另一个 CSimpleString 对象。 例:CSimpleString str0(“abc”); CSimpleString str(str0);字符串+、+=重载
时间: 2024-02-27 20:58:35 浏览: 74
StringBuffer类-Java学习资料
的实现:CSimpleString 支持字符串的加法运算符和加等运算符,它们都是用来连接两个字符串的。 例:CSimpleString str1(“abc”); CSimpleString str2(“def”); CSimpleString str3 = str1 + str2; // str3 等于 “abcdef” str1 += str2; // str1 等于 “abcdef” b) 类定义如下:
```c++
class CSimpleString {
public:
// 构造函数
CSimpleString();
CSimpleString(const char* str);
CSimpleString(const CSimpleString& other);
// 析构函数
~CSimpleString();
// 运算符重载
CSimpleString operator+(const CSimpleString& other) const;
CSimpleString& operator+=(const CSimpleString& other);
// 成员函数
const char* GetString() const;
int GetLength() const;
void SetString(const char* str);
void Clear();
private:
char* m_pData;
int m_nLength;
};
```
其中,`m_pData` 存储字符串的指针,`m_nLength` 存储字符串的长度。构造函数和析构函数的实现如下:
```c++
CSimpleString::CSimpleString() {
m_pData = new char[1];
m_pData[0] = '\0';
m_nLength = 0;
}
CSimpleString::CSimpleString(const char* str) {
if (str == nullptr) {
// 空指针
m_pData = new char[1];
m_pData[0] = '\0';
m_nLength = 0;
} else {
int len = strlen(str);
m_pData = new char[len + 1];
strcpy(m_pData, str);
m_nLength = len;
}
}
CSimpleString::CSimpleString(const CSimpleString& other) {
int len = other.GetLength();
m_pData = new char[len + 1];
strcpy(m_pData, other.GetString());
m_nLength = len;
}
CSimpleString::~CSimpleString() {
delete[] m_pData;
}
```
加法运算符和加等运算符的实现如下:
```c++
CSimpleString CSimpleString::operator+(const CSimpleString& other) const {
CSimpleString result;
result.m_nLength = m_nLength + other.m_nLength;
result.m_pData = new char[result.m_nLength + 1];
strcpy(result.m_pData, m_pData);
strcat(result.m_pData, other.m_pData);
return result;
}
CSimpleString& CSimpleString::operator+=(const CSimpleString& other) {
int newLength = m_nLength + other.m_nLength;
char* newData = new char[newLength + 1];
strcpy(newData, m_pData);
strcat(newData, other.m_pData);
delete[] m_pData;
m_pData = newData;
m_nLength = newLength;
return *this;
}
```
其他成员函数的实现如下:
```c++
const char* CSimpleString::GetString() const {
return m_pData;
}
int CSimpleString::GetLength() const {
return m_nLength;
}
void CSimpleString::SetString(const char* str) {
if (str == nullptr) {
// 空指针
Clear();
} else {
int len = strlen(str);
char* newData = new char[len + 1];
strcpy(newData, str);
delete[] m_pData;
m_pData = newData;
m_nLength = len;
}
}
void CSimpleString::Clear() {
delete[] m_pData;
m_pData = new char[1];
m_pData[0] = '\0';
m_nLength = 0;
}
```
阅读全文