C++中String类的实现
来源:互联网 发布:php登录次数 编辑:程序博客网 时间:2024/06/05 22:39
String类的书写有很多坑,写此博客用来以后复习,
深拷贝处理:拷贝时,给对象开辟同源对象一样大小的空间,避免浅拷贝中因公用一块空间导致的单个空间操作对其他对象的影响,以及在销毁对象资源是一块空间被多次申请释放
#include<iostream>#include<string.h>using namespace std;class String{private: char * _pStr;//用来记录字符串的指针public://构造函数/*平常我们可能会这样来用类创建一个对象:String s1("hello");String s2("");string s3(NULL);故而我们在写构造函数就的有技巧(写成科变参数的形式),当传参是传NULL或""时,我们都统一给开辟一个空间,放“\0”;*/ String(const char* pStr = NULL) { if (pStr == NULL) { _pStr = new char[1]; *_pStr = '\0'; } else { _pStr = new char[strlen(pStr) + 1];//strlen函数测出来的长度加1 strcpy(_pStr,pStr); } } //拷贝构造函数:开辟跟源字符串长度一样长的空间给目标对象 String(String& s) :_pStr(new char[strlen(s._pStr)+1]) { strcpy(_pStr, s._pStr); } //赋值运算符的重载:因为考虑到连续赋值的情况,故返回值设定为右操作数 String& operator=(const String& s) { //当发现是自己给自己赋值时,不处理,返回。 if ((*this)._pStr == s._pStr) return *this; else if (NULL == this) { char *ptemp = new char[strlen(s._pStr) + 1]; // ptemp = s._pStr; delete _pStr; _pStr = ptemp; ptemp = NULL; } else { strcpy((*this)._pStr,s._pStr); } return *this; } //析构函数 ~String() { if (_pStr) delete[] _pStr; }};int main(void){ String s1 = "hello"; String s2(s1); String s3; s3=s2; return 0;}
结果为:
阅读全文
0 0
- [C++]String类的实现
- [C++]String类的实现
- [C++]String类的实现
- C++String类的实现
- 【c++】string类的实现
- C++string类的实现
- C++string类的实现
- C++String类的实现
- C++string类的实现
- C/C++string类的实现
- C++string类的一个实现
- C++string类的简单实现
- c++string类的简单实现
- C++—String类接口的实现
- C语言 string.h 中函数的实现
- 【C/C++】String类实现
- String 中 "+"的实现
- C string buffer的实现
- postgrepsql简单部署
- VS2010工程中的*.vcxproj.filters文件用于项目下文件的虚拟目录,不能丢弃
- 消息队列的使用场景
- mybatis使用
- 前端面试题-长沙
- C++中String类的实现
- GIT命令符收集
- Event多线程同步演示
- 文件与文件夹
- java SE day14 火推
- lesson5-2
- C、C++中字符串和字符指针之间的转换
- kudu和kudu-impala的安装流程
- 监听tab键 是光标只在两个input中切换 监听回车键