C++string类的简单实现

来源:互联网 发布:农业数据库 编辑:程序博客网 时间:2024/05/16 12:24
#include<iostream>#include<cstring>using namespace std;//C++实现stringclass MyString{private:char* m_pData;public://构造函数MyString(){m_pData = new char[1];*m_pData = '\0';}//构造函数MyString(const char* str){m_pData = new char[strlen(str) + 1];strcpy(m_pData, str);}//拷贝构造函数MyString(const MyString& other){m_pData = new char[strlen(other.m_pData) + 1];strcpy(m_pData, other.m_pData);}//重载赋值运算符 = MyString operator =(const MyString& other){if (this != &other){if (this->m_pData != NULL){delete m_pData;m_pData = NULL;}m_pData = new char[strlen(other.m_pData) + 1];strcpy(m_pData, other.m_pData);}return*this;}//重载+运算符MyString operator +(const MyString& other)const{MyString newstring;if (this->m_pData == NULL){newstring = other;}else if (other.m_pData == NULL){newstring = *this;}else{newstring.m_pData = new char[strlen(this->m_pData) + strlen(other.m_pData) + 1];strcpy(newstring.m_pData, this->m_pData);strcat(newstring.m_pData, other.m_pData);}return newstring;}//重载下标运算符char& operator [](unsigned int index){//进行下标的判断,看它是否有效if (index >= 0 && index < strlen(this->m_pData)){return this->m_pData[index];}}friend ostream& operator << (ostream& os, MyString& str);~MyString(){if (this->m_pData != NULL){delete this->m_pData;this->m_pData = NULL;}}};//重载输出运算符<<ostream& operator << (ostream& os, MyString& str){os << str.m_pData;return os;}int main(void){MyString str("Hello string");MyString str1;str1 = str;cout << str1 << endl;cout << str << endl;cout << str[2] << endl;return 0;}

原创粉丝点击