C++自定义字符串类实现指南:从零开始打造String类
一、简介和特点
String类是一个自定义的字符串处理类,封装了C风格字符串的常用操作。这个实现展示了如何用C++构建一个基础的字符串类。
主要特点:
二、与其他实现的优点
相比直接使用C风格字符串和标准库string,这个实现有以下优势:
更安全:自动内存管理减少内存泄漏风险
更直观:运算符重载使代码更易读
更灵活:可根据需求扩展功能
学习价值:深入理解字符串底层实现
轻量级:不依赖标准库,适合嵌入式等场景
三、实现步骤解析
1.成员变量定义:
字符指针存储字符串
整型变量记录长度
2.构造函数和析构函数:
默认构造空字符串
从C字符串构造
自动释放内存
3.基本功能实现:
获取长度
字符串复制
字符串输出
4.运算符重载:
相等和不等比较
字符串连接
下标访问
四、完整代码和注释
#include<iostream>
#include<cstring>
using namespace std;
// 自定义字符串类
class String{
char* str=nullptr; // 字符串指针
int size=0; // 字符串长度
public:
// 默认构造函数,创建空字符串
String(){
size = 0;
str = new char[1]; // 分配最小内存
str[0] = '\0'; // 空字符串终止符
}
// 从C风格字符串构造
String(char* s){
size = (int)strlen(s); // 获取输入字符串长度
str = s; // 直接使用输入指针(实际应深拷贝)
}
// 获取字符串长度
int getsize(){
return size;
}
// 析构函数,释放内存
~String(){
str = nullptr; // 先置空
delete[] str; // 再释放
}
// 字符串复制方法
void copy(String s) {
size = s.size; // 复制长度
strcpy_s(str, sizeof(s.str),s.str); // 复制内容
}
// 重载==运算符,比较字符串内容
bool operator==(String s) {
return strcmp(s.str,str)==0;
}
// 重载!=运算符
bool operator!= (String s){
return strcmp(s.str, str) != 0;
}
// 重载+运算符,字符串连接
String operator+(String s)
{
size = (int)strlen(s.str) + strlen(str); // 计算新长度
cout << size;
char* s1 = new char[size+5]; // 分配足够空间
int j = 0;
// 复制第一个字符串
for (int i = 0;i < strlen(str);i++)
{
s1[j] = str[i];
j++;
}
// 复制第二个字符串
for (int i = 0;i < strlen(s.str);i++)
{
s1[j] = s.str[i];
j++;
}
s1[j] = '\0'; // 添加终止符
return s1; // 返回新字符串
}
// 重载[]运算符,字符访问
char operator[](int idx)
{
return str[idx]; // 返回指定位置字符
}
// 输出字符串内容
void output()
{
printf("%s\n", str);
}
};五、总结
本文展示了一个基础的C++字符串类实现,涵盖了字符串处理的核心功能。通过这个实现,可以深入理解字符串操作的底层原理,学习C++的类设计、内存管理和运算符重载等重要概念。虽然这个实现相对简单,但它为扩展更复杂的字符串功能奠定了基础。
原创内容 转载请注明出处
