c++中string 的实现
来源:互联网 发布:源码资本投资的项目 编辑:程序博客网 时间:2024/06/02 05:50
c++中string 的实现
用c实现string类是c++面试中常考的一个题目、通过这道题可以反应出程序员对c++的最基本的功底——
对构造函数,拷贝构造函数、析构函数、内存管理、以及操作符重载为成员函数和非成员函数两种方式的区别、等知识点的掌握程度。话不多说下面我直接贴代码,如有纰漏望指正。
代码
#include<iostream>#include<string.h>using namespace std;class String{ friend ostream& operator<< (ostream&,String&); friend istream& operator>> (istream&,String&); public: String(); String(const char* str); String(const String &other); String& operator=(String& other); ~String(); String& append(const char c); private: char *m_data; };String::String() //默认构造函数 { cout<<"default construct"<<endl; m_data = new char[1]; if(NULL != m_data) { *m_data = '\0'; } }String::String(const char *rstr) //构造函数 { if(rstr == NULL) { m_data = new char[1]; *m_data = '0'; } else { cout<<"const char construct"<<endl; m_data = new char[strlen(rstr)+1]; if(NULL != m_data) { strcpy(m_data,rstr); } }}String::String(const String &other) //拷贝构造函数 { //因为接受参数为String类的引用,而引用不为空,所以不做判空处理 cout<<"copy construct"<<endl; m_data = new char[strlen(other.m_data)+1]; if(m_data) { strcpy(m_data,other.m_data); }}istream& operator>>(istream& in, String& str)//重载输入流 { char tmp[255]; int i = 0; char c; if(in.get(tmp,255)) { str.m_data = new char[strlen(tmp)+1]; strcpy(str.m_data,tmp); } return in;}ostream& operator<<(ostream& out,String& str)//输出 { out<<str.m_data; return out;}String& String::operator=(String& other)//赋值{ if(this != &other) { delete [] m_data; m_data = new char[strlen(other.m_data)+1]; if(m_data) { strcpy(m_data,other.m_data); } } return *this;} String& String::append(const char c) //追加 { int len = strlen(m_data)+2; char * buf = new char[len]; strcpy(buf,m_data); buf[len-2] = c; buf[len-1] = '\0'; if(m_data) { delete [] m_data; } m_data = new char[len]; if(m_data) { strcpy(m_data,buf); } return *this;} String::~String()//析构函数重载 成员含有指针时必须重载拷贝构造函数、析构函数、赋值函数。 { if(m_data) { delete [] m_data; }}int main(){ String s1; String s2("hell"); String s3;// s3 = s2; s2.append('o'); cout<<s1; cout<<s2<<endl; cin>>s3; cout<<s3; return 0;}
阅读全文
0 0
- C语言 string.h 中函数的实现
- String 中 "+"的实现
- [C++]String类的实现
- [C++]String类的实现
- [C++]String类的实现
- C++String类的实现
- 【c++】string类的实现
- C string buffer的实现
- C++string类的实现
- C++string类的实现
- C++String类的实现
- C++string类的实现
- C/C++string类的实现
- c++中string 的实现
- C中string中一些基本函数的介绍与实现
- .Net中(C#),怎样能够更好的实现string的换行
- C语言标准库string.h中常用的字符串函数的实现
- c plus plus的string函数实现
- 软件测试中的冲突测试
- angularJS <input type="file> 图片的base64编码
- 【牛腩新闻发布系统】——母版页与web控件
- 如何将linux英文版系统转换为中文版系统
- Spring的bean后处理器和容器后处理器
- c++中string 的实现
- 顺序表应用3:元素位置互换之移位算法
- 神经网络/多层感知器(MLP)架构:选择隐藏层数量和大小的标准
- Markdown文档中尝试添加iframe 香港科技大学的一个3D网站
- iOS wkwebview 弹出键盘
- 过了科目二!
- 百练_3258:兔子产子
- IOS 关于取消延迟执行函数的种种。performSelector与cancelPreviousPerformRequestsWithTarget
- 欢迎使用CSDN-markdown编辑器