4.1自定义字符串类。具体要求如下。 (1)可以封装 C-字符串,不含串结束符号 (2) 对象构造(重载)、拷贝构造、析构、赋值相关的四大函数; (每个同学必须会写); (3) 其他成员函数(如:length、c_str 等); (4) 测试用例设计。
时间: 2024-09-18 12:06:54 浏览: 41
在C++中,创建一个自定义的字符串类(StringClass),用于处理不含结束符的C风格字符串,你可以按照以下步骤来完成:
**1. 定义类结构:**
```cpp
class StringClass {
private:
char* data; // 存储字符数组
int length; // 字符串长度
public:
// 构造函数(无终止符)
StringClass(const char* str); // 初始化构造函数
// 重载构造函数(接受已有字符串并复制)
StringClass(const StringClass& other);
~StringClass(); // 析构函数,释放内存
// 拷贝构造函数
StringClass& operator=(const StringClass& other);
// 赋值操作
void assign(const char* str);
// 成员函数:获取长度
int getLength() const;
// c_str 函数,返回指向内部数据的常量指针
const char* c_str() const;
};
```
**2. 实现成员函数:**
```cpp
// 构造函数
StringClass::StringClass(const char* str) : length(strlen(str)), data(new char[length + 1]) {
std::copy(str, str + length, data);
data[length] = '\0'; // 添加终止符
}
// 重载构造函数
StringClass::StringClass(const StringClass& other) : length(other.length), data(new char[length + 1]) {
std::copy(other.data, other.data + length, data);
data[length] = '\0';
}
StringClass::~StringClass() {
delete[] data;
}
// 拷贝构造函数和赋值操作
StringClass& StringClass::operator=(const StringClass& other) {
if (this != &other) {
delete[] data;
length = other.length;
data = new char[length + 1];
std::copy(other.data, other.data + length, data);
data[length] = '\0';
}
return *this;
}
void StringClass::assign(const char* str) {
if (str) {
delete[] data;
length = strlen(str);
data = new char[length + 1];
std::copy(str, str + length, data);
data[length] = '\0';
} else {
delete[] data;
data = nullptr;
length = 0;
}
}
// 获取长度
int StringClass::getLength() const {
return length;
}
// c_str 函数
const char* StringClass::c_str() const {
return data;
}
```
**3. 测试用例设计:**
```cpp
#include <iostream>
int main() {
StringClass s1("Hello");
StringClass s2(s1); // 使用拷贝构造函数
s1.assign("World"); // 赋值操作
std::cout << "s1 length: " << s1.getLength() << ", s1 c_str: " << s1.c_str() << std::endl;
StringClass s3 = "CSDN"; // 直接构造
std::cout << "s3 length: " << s3.getLength() << ", s3 c_str: " << s3.c_str() << std::endl;
return 0;
}
```
阅读全文