1.首先创建.h文件,作为头文件,其中包含类的成员变量和重载成员函数。
#ifndef _MYSTRING_H #define _MYSTRING_H #include <iostream> using namespace std; class MyString { private: int m_length; char *m_data; public: MyString(); MyString(char *str); MyString(int a,char ch); MyString(const MyString &s); //~MyString(); // << >> friend ostream &operator <<(ostream &out ,const MyString &s); friend istream &operator >>(istream &in , MyString &s); //重载 = 运算符 MyString &operator =(char *str); MyString &operator =(const MyString &s); //重载 []运算符 char &operator [](int index); MyString &operator +(char *str); MyString &operator +(const MyString &s); MyString &operator +=(char *str); MyString &operator +=(const MyString &s); //重载 ==,!= 运算符 bool operator ==(char *str); bool operator ==(const MyString &s); bool operator !=(char *str); bool operator !=(const MyString &s); //重载 >,<运算符 bool operator >(char *str); bool operator >(const MyString &s); bool operator <(char *str); bool operator <(const MyString &s); }; #endif
2.创建.cpp文件,string.cpp,用于编写重载成员函数。
#include "mystring.h" #include <iostream> #include <cstring> using namespace std; MyString::MyString() { m_length = 0; m_data = NULL; } MyString::MyString(char *str) { m_length = strlen(str); m_data = new char[m_length + 1]; strcpy(m_data,str); m_data[m_length] = '\0'; } MyString::MyString(int a,char ch) { m_length = a; m_data = new char[m_length + 1]; for(int i = 0;i < m_length;i++) { m_data[i] = ch; } m_data[m_length] = '\0'; } MyString::MyString(const MyString &s) { m_length = s.m_length; m_data = new char [m_length + 1]; strcpy(m_data,s.m_data); } /* MyString::~MyString() { delete[m_length]m_data; }*/ ostream &operator <<(ostream &out,const MyString &s) { out << s.m_data ; return out; } istream &operator >>(istream &in,MyString &s) { char tmp[100]; in >> tmp; s.m_length = strlen(tmp); s.m_data = new char[s.m_length + 1]; strcpy(s.m_data,tmp); s.m_data[s.m_length] = '\0'; return in; } MyString &MyString::operator =(char *str) { m_length = strlen(str); m_data = new char[m_length + 1]; strcpy(m_data,str); m_data[m_length] = '\0'; return *this; } MyString &MyString::operator =(const MyString &s) { if(m_data == NULL) { m_length = s.m_length; m_data = new char[m_length + 1]; strcpy(m_data,s.m_data); m_data[m_length] = '\0'; } return *this; } char &MyString::operator [](int index) { return m_data[index]; } MyString &MyString::operator +(char *str) { char *temp; temp = m_data; m_length = m_length + strlen(str); m_data = new char[m_length + 1]; strcpy(m_data,temp); strcat(m_data,str); delete []temp; return *this; } MyString &MyString::operator +(const MyString &s) { char *temp; temp = m_data; m_length = m_length + strlen(s.m_data); m_data = new char[m_length + 1]; strcpy(m_data,temp); strcat(m_data,s.m_data); delete []temp; return *this; } MyString &MyString::operator +=(char *str) { char *temp; temp = m_data; m_length = m_length + strlen(str); m_data = new char[m_length + 1]; strcpy(m_data,temp); strcat(m_data,str); delete []temp; return *this; } MyString &MyString::operator +=(const MyString &s) { char *temp; temp = m_data; m_length = m_length + strlen(s.m_data); m_data = new char[m_length + 1]; strcpy(m_data,temp); strcat(m_data,s.m_data); delete []temp; return *this; } bool MyString::operator ==(char *str) { if(m_data == str) return true; else return false; } bool MyString::operator ==(const MyString &s) { if(m_data == s.m_data) return true; else return false; } bool MyString::operator !=(char *str) { if(m_data != str) return true; else return false; } bool MyString::operator !=(const MyString &s) { if(m_data != s.m_data) return true; else return false; } bool MyString::operator >(char *str) { if(m_data > str) return true; else return false; } bool MyString::operator >(const MyString &s) { if(m_data > s.m_data) return true; else return false; } bool MyString::operator <(char *str) { if(m_data < str) return true; else return false; } bool MyString::operator <(const MyString &s) { if(m_data < s.m_data) return true; else return false; }
3.最后创建main.cpp文件,编写主函数
#include "mystring.h" #include <iostream> #include <cstring> using namespace std; int main(int argc, char **argv) { MyString s1("laowangbawei"); MyString s2(10,'a'); MyString s3(s2); cout << s1 << endl; cout << s2 << endl; cout << s3 << endl; s1 = "xiaojibatao"; cout << s1 << endl; //cin >> s2; //cout << s2 << endl; cout << s1[5] << endl; cout << "*******************" << endl; MyString s6 = "hello"; MyString s7("5465465"); s1 = s1 + s6; s2 += s7; cout << "s1 + s6 = " << s1 << endl; cout << "s1 + s7 = " << s2 << endl; cout << "s1 + laowangba = " << s1 + "laowangba" << endl; if(s1 == s2) { cout << "s1 == s2" << endl; } else cout << "s1 != s2" << endl; return 0; }