mystring.h
#ifndef _MYSTRING_H_
#define _MYSTRING_H_
#include <iostream>
using namespace std;
class Mystring
{
//<< >> 全局函数
friend istream & operator >> (istream &in ,Mystring & s1); // 重载 >>
friend ostream & operator << (ostream &out, const Mystring & s1); //重载 <<
private:
char *m_data;
int m_len;
void init();
public:
Mystring();
Mystring(char *str);
Mystring(int l, char ch);
Mystring(const Mystring &s);
Mystring & operator =( Mystring &s);
Mystring & operator +=(Mystring &s);
char & operator [](int index);
};
#endif
mystring.cpp
#include "mystring.h"
#include <string.h>
#include <iostream>
#pragma warning(disable:4996)
using namespace std;
void Mystring::init()
{
m_len = 1;
m_data = new char[m_len+1];
}
Mystring::Mystring()
{
init();
}
Mystring::Mystring(char *str)
{
m_len = strlen(str);
m_data = new char[m_len + 1];//注意+1
strcpy(this->m_data, str);
}
Mystring::Mystring(int l, char ch)
{
m_len = l;
m_data = new char[m_len + 1];
for (int i = 0; i < l; i++)
{
m_data[i] = ch;
}
m_data[l] = '\0';//!!!!!!!!!!!!!!!!!!!!!!!!!!
}
Mystring::Mystring(const Mystring &s)
{
this->m_len = s.m_len;
m_data = new char[m_len + 1];//!!!!!!!!!!!!
strcpy(this->m_data , s.m_data);
}
istream & operator >>(istream &in,Mystring &s)//重载 >>
{
char tmp[1024] = {0};
in >> tmp;
if (s.m_data != NULL)
{
delete s.m_data;
}
s.m_len = strlen(tmp);
s.m_data = new char[s.m_len + 1];//注意+1
strcpy(s.m_data, tmp);
return in;
}
ostream & operator << (ostream &out, const Mystring &s1)//重载 <<
{
out << s1.m_data;
return out;
}
Mystring& Mystring::operator =(Mystring &s)//重载 >>
{
m_len = s.m_len;
if (m_data != NULL)
{
delete m_data;
}
m_data = new char[s.m_len + 1];//注意+1
strcpy(m_data, s.m_data);
return *this;
}
Mystring & Mystring::operator +=(Mystring &s)
{
m_len = m_len + s.m_len;
char *tmp = new char [m_len + 1];
strcpy(tmp, m_data);
strcat(tmp,s.m_data);
delete m_data;
m_data = tmp;
return *this;
}
char & Mystring::operator [](int index)
{
return m_data[index];
}
main.cpp
#include <iostream>
#include "mystring.h"
using namespace std;
int main()
{
Mystring s1;
Mystring s2("hello");
Mystring s3(10, 'a');
Mystring s4 = s2;
Mystring s5(s2);
cin >> s1;
cout << "s1 = " << s1 << endl;
cout << "s2 = " << s2 << endl;
cout << "s3 = " << s3 << endl;
cout << "s4 = " << s4 << endl;
cout << "s5 = " << s5 << endl;
s1 += s2;
cout << s1 << endl;
cout << s1[0] << endl;
s1[1] = '1';
cout << s1 << endl;
system("pause");
return 0;
}