string类
2015-12-14 17:29
197 查看
string类的实现是笔试面试常见的题型之一,考察的关键点是函数的返回值和函数的参数,这个是很关键的,如果仅仅是简单的以为把函数里面的逻辑写出来是远远不够的。另外一个关键就是深拷贝和浅拷贝和内存的申请和释放。
1、下面直接给出基本的类定义:
2、函数的实现
2.1、默认构造函数
2.2、常用构造函数
2.3、拷贝构造函数
2.4、析构函数
2.5、赋值操作符
2.6、+操作符重载
2.7、重载[]
2.8、判断相等
1、下面直接给出基本的类定义:
class MyString { public: MyString(); MyString(const char *str); MyString(const MyString& rhs); ~MyString(); MyString& operator=(const MyString& rhs); MyString operator+(const MyString& rhs); char operator[](const unsigned int index); bool operator==(const MyString& rhs); private: char *_str; };
2、函数的实现
2.1、默认构造函数
MyString::MyString() { _str = new char[1]; //申请一个字节的空间,放入'\0' *_str = '\0'; }
2.2、常用构造函数
//使用const char* str来初始化 MyString::MyString(const char* str) { if(NULL == str) { _str = new char[1]; *_str = '\0'; }else { int len = strlen(str); _str = new char[len+1]; snprintf(_str,len,"%s",str); //放弃使用strcpy } }
2.3、拷贝构造函数
MyString::MyString(const MyString& rhs) { int len = strlen(rhs._str); _str = new char[len+1]; snprintf(_str,len,"%s",str); //放弃使用strcpy }
2.4、析构函数
MyString::~MyString() { if(_str) { delete[] _str; _str = NULL; } }
2.5、赋值操作符
MyString::MyString& operator=(const String& rhs) { if (this != &rhs) { delete[] _str; _str = new char[strlen(rhs._str) + 1]; strcpy(_str, rhs._str); } return *this; }
2.6、+操作符重载
MyString MyString::operator+(const MyString& rhs) { MyString newString; if( !rhs._str) { newString = *this; }else if( !_str) { newString = rhs; }else { newString._str = new char[strlen(_str)+strlen(rhs._str)+1]; snprintf(_str,len,"%s",_str); strcat(newString,_str,rhs._str); } return newString; }
2.7、重载[]
char MyString::operator[](const unsigned int index) { return _str[index]; }
2.8、判断相等
bool MyString::operator==(const MyString& rhs) { return 0 == strcmp(_str,rhs._str); }
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android上改变listView的选中颜色
- String.intern
- Prototype源码浅析 String部分(二)
- Ruby中的String对象学习笔记
- C#中struct和class的区别详解
- PostgreSQL ERROR: invalid escape string 解决办法
- VBS ArrayList Class vbs中的数组类
- 大家看了就明白了css样式中类class与标识id选择符的区别小结
- 浅谈C++中的string 类型占几个字节
- 标准C++类string的Copy-On-Write技术
- C++实现string存取二进制数据的方法
- C#中string和StingBuilder内存中的区别实例分析
- PHP STRING 陷阱原理说明
- 深入了解PHP类Class的概念
- c#中 String和string的区别介绍
- C#实现的图片、string相互转换类分享