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;
}