String类的实现
1、在类中可以访问private成员包括两层含义:可以访问this指针的private成员;可以访问同类对象的private成员。
2、这里的String可以认为是个资源管理类,内部有个char指针,在堆上分配对象,而且对于String应该是深复制,不是复制指针,而是要复制指针指向的内容。
String类的定义(头文件):
1 #ifndef String_H_ 2 #define String_H_ 3 class String 4 { 5 public: 6 String(const char* src); 7 String(const String& rhs); 8 String& operator=(const String& rhs); 9 ~String(); 10 private: 11 char* _data; 12 }; 13 #endif
String类的实现(cpp文件):
1 #include "String.h" 2 #include <iostream> 3 String::String(const char* src) 4 { 5 if(src==NULL) 6 { 7 _data = new char[1]; 8 _data[0]='\0'; 9 } 10 else 11 { 12 _data = new char[strlen(src)+1]; 13 strcpy(_data,src); 14 } 15 } 16 17 String::String(const String& rhs) 18 { 19 _data = new char[strlen(rhs._data)+1]; 20 strcpy(_data,rhs._data); 21 } 22 23 String& String::operator=(const String& rhs) 24 { 25 if(this == &rhs) 26 { 27 return *this; 28 } 29 delete[]_data; 30 _data = new char[strlen(rhs._data)+1]; 31 strcpy(_data,rhs._data); 32 return *this; 33 } 34 35 String::~String() 36 { 37 delete []_data; 38 }
上面的String实现,使用了new char在堆上分配内存,当然也可以使用malloc,需要注意的是,这种情况下,要使用free释放内存。而且,要注意的是,new和delete是关键字,而malloc和free是方法。
1 #include "String.h" 2 #include <iostream> 3 String::String(const char* src) 4 { 5 if(src==NULL) 6 { 7 _data = (char*)malloc(1); 8 _data[0]='\0'; 9 } 10 else 11 { 12 _data = (char*)malloc(strlen(src)+1); 13 strcpy(_data,src); 14 } 15 } 16 17 String::String(const String& rhs) 18 { 19 _data = (char*)malloc(strlen(rhs._data)+1); 20 strcpy(_data,rhs._data); 21 } 22 23 String& String::operator=(const String& rhs) 24 { 25 if(this == &rhs) 26 { 27 return *this; 28 } 29 free(_data); 30 _data = (char*)malloc(strlen(rhs._data)+1); 31 strcpy(_data,rhs._data); 32 return *this; 33 } 34 35 String::~String() 36 { 37 free(_data); 38 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理