C++ string类的实现
2016-02-23 16:40
399 查看
C++String类主要函数的实现:
class MyString { friend ostream& operator<< (ostream&, MyString&); //重载<< friend istream& operator >> (istream&, MyString&); //重载>> public: MyString(const char* str=NULL); //构造函数 MyString(const MyString &str); //赋值构造函数 MyString& operator=(const MyString &str); //重载运算符= MyString operator+(const MyString &str); //重载运算符+ bool operator==(const MyString&); //重载运算符== char& operator[](unsigned int); //重载运算符[] size_t size() { return strlen(data); } ~MyString() { delete[] data; } private: char *data; //保存字符串 } MyString::MyString(const char*str) { if(str == NULL) { data = new char[1]; *data = '\0'; } else { int length = strlen(str); data = new char[length + 1]; strcpy(data, str); } } MyString::MyString(const MyString &str) { int length = strlen(str.data); data = new char[length + 1]; strcpy(data, str.data); } MyString& MyString::operator=(const MyString& str) { if(this == &str) //检查自赋值 return *this; delete[] data; //释放原有内存资源 //分配新的内存资源,并复制内容 int length = strlen(str.data); data = new char[length + 1]; strcpy(data, str.data); //返回本对象引用 return *this; } MyString MyString::operator+(const MyString &str) const { MyString newString; if(!str.data) newString = *this; if(!data) newString = str; else { newString.data = new char[strlen(data) + strlen(str.data) + 1]; strcpy(newString.data, data); strcat(newString.data, str.data); } return newString; } bool MyString::operator==(const MyString& str) { if(strlen(str.data) != strlen(data)) return false; return strcmp(data, str.data) ? false : true; } char& MyString::operator[](unsigned int n) { if(n >= 0 && n <= strlen(data)) return data ; } ostream& operator<<(ostream& os, MyString& str) { os << str.data; return os; } istream& operator>>(istream& is, MyString& str) { char temp[256]; is >> setw(256) >> temp; str = temp; return temp; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 关于指针的一些事情
- android上改变listView的选中颜色
- String.intern
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Prototype源码浅析 String部分(二)
- Ruby中的String对象学习笔记
- C#中struct和class的区别详解
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- PostgreSQL ERROR: invalid escape string 解决办法
- VBS ArrayList Class vbs中的数组类
- 大家看了就明白了css样式中类class与标识id选择符的区别小结
- C++联合体转换成C#结构的实现方法