我跟很多童鞋一样,目前也在学习C++中,昨天正在学习has-a关系中的包含时,例题是将string类包含的,因为是小白嘛,嘿嘿,为了更深的理解包含以及其他相关问题,就果断上机边敲代码边理解咯,既然用到了string类,自己就突然想写个简易的string类(毕竟之前书中提到过编写简易string类,但也只是看看,还没来得及自己写一个)于是就自己写了一个简易的string类,也算对之前学到的部分知识一个小小的汇总,string类也是很考研小白的内存管理的,这个String类也是我调试了很多遍后没啥问题才敢发出来的,嘻嘻,废话不多说,附上自己写的string类。只写了部分主要功能,其他功能,以后用到后,再陆续添加。如果代码上有什么问题的话,还请各位大大能指点小弟我下。
String头文件:
#ifndef STRING_H_
#define STRING_H_
#include
//StringClass
class String{
private:
char* StringTemp;
protected:
public:
String(char* Str = NULL);
String(const String & KStr_t);
virtual ~String();
int lenght()const;
char operator[](unsigned int Count);
friend std::ostream & operator<<(std::ostream & output,const String & KStr_t);
friend std::istream & operator>>(std::istream & input,String & KStr_t);
String & operator=(const String & KStr_t);
String & operator=(const char* KStr_t);
String operator+(const String & KStr_t)const;
bool operator==(const String & KStr_t)const;
};
#endif
String实现:
#include "String.h"
#include
String::String(char* Str){
if(Str == NULL){
StringTemp = new char[1];
strcpy(StringTemp,"");
}
else{
StringTemp = new char[strlen(Str)+1];
strcpy(StringTemp,Str);
}
}
String::~String(){
delete []StringTemp; //释放内存
}
//String测字符串长度方法
int String::lenght()const{
return strlen(StringTemp);
}
char String::operator[](unsigned int Count){
if(Count>=0&&Count
}
}
//重载<<运算符,用于直接对对象进行输出
std::ostream & operator<<(std::ostream & output,const String & KStr_t){
output << KStr_t.StringTemp;
return output;
}
//重载>>运算符,用于直接对对象进行输入字符串
std::istream & operator>>(std::istream & input,String & KStr_t){
delete []KStr_t.StringTemp;
char StrTemp[255]; //申请255字节空间存放临时字符串
input.getline(StrTemp,254);
KStr_t.StringTemp = new char[strlen(StrTemp)+1];
strcpy(KStr_t.StringTemp,StrTemp);
return input;
}
//同类型对象赋值方法
String & String::operator=(const String & KStr_t){
if(this == &KStr_t){return *this;} //判断是否为将自身赋值给自身
delete StringTemp; //由于是赋值操作,所以要先
将原来的指针所指向的堆内存给释放掉,以免造成内存泄漏
StringTemp = new char[strlen(KStr_t.StringTemp)+1];
strcpy(StringTemp,KStr_t.StringTemp);
return *this; //返回自身引用,以便能继续
赋值
}
//用于对String对象赋值字符串
String & String::operator=(const char* KStr_t){
delete StringTemp; //首先释放掉String对象
StringTemp指针所指向的堆内存块,防止内存泄漏
StringTemp = new char[strlen(KStr_t)+1];
strcpy(StringTemp,KStr_t);
return *this;
}
//模拟String对象字符串相加的操作
String String::operator+(const String & KStr_t)const{
String Temp;
Temp.StringTemp = new char[strlen(StringTemp)+strlen(KStr_t.StringTemp)+1]; //由于需要将两个String对象
字符串相加,所以要申请能足够大的内存块
strcpy(Temp.StringTemp,StringTemp);
strcat(Temp.StringTemp,KStr_t.StringTemp); //字符串连接函数,不懂有啥用的谷歌一
下
return Temp; //返回两个字符串相加(字符串链接)后的String对象,由于该临时对象是在函数内部声明的(局部对象)所以要返回该对象而不是该对象的引用
}
//用同类对象初始化的构造函数
String::String(const String & KStr_t){
StringTemp = new char[strlen(KStr_t.StringTemp)+1];
strcpy(StringTemp,KStr_t.StringTemp);
}
//判断两个String对象所存储字符串是否相等,相等返回true否则返回false
bool String::operator==(const String & KStr_t)const{
if(strcmp(StringTemp,KStr_t.StringTemp)==0){
return true;
}
else{
return false;
}
}
C++简单String类的实现
发表于:2017-08-08
作者:网络转载
来源:
 相关文章
让你的 C++ 代码变得更加高效和优雅... C++性能优化指南:让你的程序飞起来! 指针变量在C/C++中的内存占用 C++ Module详解:模块化编程终极指南 深入学习 C++编程,数据结构与算法关系 C++编程入门!五个学习阶段让你从新手...- 周排行
- 月排行
-   缓存技术:加速应用,提高用户体验
-   六个好用的在线代码编辑器,你选哪个?
-   C++简单String类的实现
-   适合Java开发者学习的Python入门教程
-   在软件开发中实施AI与敏捷管理的九点建议
-   快速提升 UI 设计效果的 6 个小技巧
-   如何将SAST融入DevSecOps流程中?
-   微服务架构:构建高灵活性的分布式系统
-   这 14 个 VSCode 插件,让你写代码如同神一般
-   最全的C++资源大全,纯干货!
-   智能可穿戴设备的主要测试步骤
-   自动化神器AutoIt,告别重复劳动
-   缓存技术:加速应用,提高用户体验
-   分布式系统:常见陷阱和应对复杂性的...