请设计一个简单字符串类 (CSimpleString),使 CSimpleString 对象比普通的字符(char)数组更安全、更易于使用。 a) 功能说明:CSimpleString 对一个可变长度字符串(char *)数据进行封装,提供字 符串的存储分配和释放;提供基于字符串数据的通用操作和运算符重载。 b) 需求说明: i. 构造函数和析构函数。CSimpleString 提供 3 种构造函数: 1. 空构造函数:创建一个空字符串对象。 例:CSimpleString str; 2. 接收一个字符串指针(char *)的构造函数:使用一个已知的字符串构造 对象。 例:CSimpleString str(“abc”); 3. 拷贝构造函数:可以用一个 CSimpleString 对象构造另一个 CSimpleString 对象。 例:CSimpleString str0(“abc”); CSimpleString str(str0); ii. 字符串操作与运算符重载 1. 赋值运算符(=)重载:允许将一个字符串指针直接赋值给一个 CSimpleString 对象,也允许将一个 CSimpleString 对象赋值给另一个 CSimpleString 对象; 例:CSimpleString str0(“abcd”), str1; str1 = “abc”; str1 = str0;数据成员的类型使用堆分配顺序存储
时间: 2024-02-27 13:51:38 浏览: 94
CSimpleString的设计如下:
```
#include <iostream>
#include <cstring>
class CSimpleString {
public:
// 默认构造函数
CSimpleString() : m_pData(nullptr), m_nLength(0) {}
// 接收一个字符串指针的构造函数
CSimpleString(const char* pData) : m_pData(nullptr), m_nLength(0) {
if(pData != nullptr) {
m_nLength = strlen(pData);
m_pData = new char[m_nLength + 1];
strcpy(m_pData, pData);
}
}
// 拷贝构造函数
CSimpleString(const CSimpleString& other) : m_pData(nullptr), m_nLength(0) {
if(other.m_pData != nullptr) {
m_nLength = other.m_nLength;
m_pData = new char[m_nLength + 1];
strcpy(m_pData, other.m_pData);
}
}
// 赋值运算符重载
CSimpleString& operator=(const char* pData) {
if(m_pData == pData) {
return *this;
}
delete[] m_pData;
m_pData = nullptr;
m_nLength = 0;
if(pData != nullptr) {
m_nLength = strlen(pData);
m_pData = new char[m_nLength + 1];
strcpy(m_pData, pData);
}
return *this;
}
// 赋值运算符重载
CSimpleString& operator=(const CSimpleString& other) {
if(m_pData == other.m_pData) {
return *this;
}
delete[] m_pData;
m_pData = nullptr;
m_nLength = 0;
if(other.m_pData != nullptr) {
m_nLength = other.m_nLength;
m_pData = new char[m_nLength + 1];
strcpy(m_pData, other.m_pData);
}
return *this;
}
// 析构函数
~CSimpleString() {
delete[] m_pData;
m_pData = nullptr;
m_nLength = 0;
}
// 获取字符串长度
int Length() const {
return m_nLength;
}
// 获取字符串内容
const char* GetData() const {
return m_pData;
}
private:
char* m_pData; // 字符串数据
int m_nLength; // 字符串长度
};
```
CSimpleString提供了三种构造函数,分别用于创建空字符串对象、使用一个已知的字符串构造对象以及用一个CSimpleString对象构造另一个CSimpleString对象。同时,CSimpleString还提供了赋值运算符(=)的重载,允许将一个字符串指针直接赋值给一个CSimpleString对象,也允许将一个CSimpleString对象赋值给另一个CSimpleString对象。另外,CSimpleString还提供了获取字符串长度和获取字符串内容的函数。字符串数据的类型使用堆分配顺序存储,以提供更好的安全性和易用性。
阅读全文