string类的实现(mystring)
来源:互联网 发布:php 网盘 程序 编辑:程序博客网 时间:2024/05/20 10:54
最近参加了实习招聘感觉自己的C++都快忘光了,其中面试过程中问到了string类的实现,需手写实现一遍。现在再实现一下
class mystring{ friend std::ostream& operator<<(std::ostream& os,const mystring & str);private : char * m_data;public : mystring(char * str=NULL); ~mystring(); mystring & operator=(const mystring & a); mystring(const mystring &a); };inline mystring::mystring(char *str=NULL){ if (str!=NULL) { m_data = new char[strlen(str)+1]; strcpy(m_data,str); }else { m_data=NULL; }}inline mystring::~mystring(){ if (m_data!=NULL) { delete[] m_data; m_data=NULL; }}inline mystring::mystring(const mystring &a)//使用静态的防止被修改 传入引用是避免拷贝函数再调拷贝函数导致编译出错{ if (a.m_data!=NULL) { m_data = new char[strlen(a.m_data)+1]; strcpy(m_data,a.m_data); } else { m_data=NULL; }}inline mystring & mystring::operator=(const mystring &a)//赋值运算符需要返回该类型的引用 这样才能连续赋值 { if (a.m_data!=NULL) { if (m_data==NULL) { m_data = new char[strlen(a.m_data)+1]; strcpy(m_data,a.m_data); } else { if (this == &a) { return *this; } delete []m_data; m_data = new char[strlen(a.m_data)+1]; strcpy(m_data,a.m_data); } } else { delete []m_data; m_data=NULL; } return *this;}std::ostream& operator<<(std::ostream& os,const mystring & str){ os<< str.m_data; return os;}
提醒自己需要注意的几点:
1. 重载赋值运算符的时候,要考虑到是否为自身,即(this与&a)的比较
2. 重载赋值运算符的时候,要返回返回该类型的应用,这样就可以实现连续赋值
3. 拷贝构造函数参数需要是引用的,因为如果参数是实例,那么从形参到实参会调用一次辅助构造函数,形成无休止的调用,造成编译出错。
4. 还有没考虑到的就是new的时候可能会出现错误,所以在函数中可先实例一个对象,然后再交换。
0 0
- string类的实现(mystring)
- MyString类的实现
- mystring类的实现
- 实现MyString类(二)—MyString.cpp实现
- 实现MyString类(一)—类声明mystring.h
- 第三课--之一(对象)实现MyString类的作业
- 自定义字符串类MyString的C++实现
- C++ MyString类的简单实现
- MyString的实现
- MyString类实现
- c++ 重写string类 MyString
- 实现自己的mystring.h
- 【15】实现一个MyString类
- C++之实现MyString类
- C++ 自定义实现MyString类
- C++之实现MyString类
- 实现MyString类(三)—关于返回对象的说明
- MyString类的实现--C++ primer plus 读书笔记
- Android .9.png图片的制作与使用
- 1. Two Sum
- python爬虫(爬取豆瓣电影)_动态网页,json解释,中文编码
- 137. Single Number II
- 版本控制的学习(Git、SVN)
- string类的实现(mystring)
- 巩固C语言(十)----指针数组 & 函数指针和指针函数
- 各种控件和布局--android学习
- 专题二 1008
- django学习的一些碎片化知识
- linux 下载flash插件
- POJ 3071 Football【概率DP】
- 输出1~100之内的素数及素数个数简单程序
- C++ http get下载网页源码