string类实现
2016-03-11 17:39
295 查看
string类
写法一:
写法一:
class String { public: String()//构造函数,当str为空字符串时 { _str = new char[1]; *_str = '\0'; cout << "string()" << endl; } String(char* str)//构造函数 :_str(new char[strlen(str + 1)])//strlen求字符串大小,不包括‘\0’,故+1留下/0空间 { strcpy(_str, str); cout << "构造" << endl; } ~String()//析构函数 { delete[]_str;//new[]要用delete[]释放 cout << "析构" << endl; } String(const String& str)//拷贝构造函数 :_str(new char[strlen(str._str) + 1]) { strcpy(_str, str._str); cout << "拷贝" << endl; } String& operator=(const String& str)//重载= { if (this != &str)//判断自赋值 { delete[]_str;//释放原空间 _str = new char[strlen(str._str) + 1];//开辟新空间 strcpy(_str, str._str);//复制 return *this; } cout << "重载" << endl; } private: char* _str; };写法二:
简化 class String { public: String()//构造函数,当str为空字符串时 { _str = new char[1]; *_str = '\0'; cout << "string()" << endl; } String(char* str)//构造函数 :_str(new char[strlen(str + 1)])//strlen求字符串大小,不包括‘\0’,故+1留下/0空间 { strcpy(_str, str); cout << "构造" << endl; } ~String()//析构函数 { delete[]_str;//new[]要用delete[]释放 cout << "析构" << endl; } String(const String& str)//拷贝构造函数 :_str(NULL) { String tmp(str._str); swap(_str, tmp._str); } //String& operator=(const String& str)//写法一 //{ // if (this != &str)//判断自赋值 // { // String tmp(_str); // swap(_str, tmp._str); // } // cout << "重载" << endl; // return*this; //} String& operator=(String str)//写法二 { swap(_str, str._str); return *this; } bool operator==(const String& s) { } private: char* _str; };写法三:
class String { public: String(char*str="") :_str(new char[strlen(str)+5]) { *(int*)_str = 1; _str += 4; strcpy(_str, str); } ~String() { if (_str != NULL) { if (--*(int*)(_str - 4)) { delete[](_str - 4); } } } String(const String& str) :_str(str._str) { ++*(int*)(_str - 4); } String& operator=(const String& str) { if (this != &str)//自赋值检查 { if (--*(int*)(_str - 4) == 0) { delete[](_str - 4); } _str = str._str; ++*(int*)(_str - 4); } return *this; } private: char *_str; };
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android java 与 javascript互访(相互调用)的方法例子
- 关于指针的一些事情
- android上改变listView的选中颜色
- String.intern
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- 一个简单的asp数据库操作类
- Prototype源码浅析 String部分(二)
- Ruby中的String对象学习笔记
- C#实现用于操作wav声音文件的类实例
- C#类的多态性详解
- 在线管理数据库 类
- Lua中调用C++函数示例
- Lua面向对象之类和继承浅析
- Lua中类的实现原理探讨(Lua中实现类的方法)
- Lua教程(一):在C++中嵌入Lua脚本
- Lua中的类编程代码实例