#include<iostream>
#include<string.h>
using namespace std;
class String
{
public:
String()
{
m_data = new char;
m_data[0] = '\0';
}
String(unsigned int length)
{
m_data = new char[length+1];
m_data[0] = '\0';
}
String(char *str)//初始化
{
m_data = new char[strlen(str)+1];
strcpy(m_data,str);
}
String(const String &ch) //拷贝构造
{
m_data = new char[strlen(ch.m_data)+1];
strcpy(m_data,ch.m_data);
}
String& operator = (const String &ch)//赋值 &
{
if(this == &ch)
return *this;
delete []m_data;
m_data = new char[strlen(ch.m_data)+1];
strcpy(m_data,ch.m_data);
return *this;
}
friend bool operator > (const String &ch1,const String &ch2)
{
return strcmp(ch1.m_data,ch2.m_data) > 0;
}
friend bool operator < (const String &ch1,const String &ch2)
{
return strcmp(ch1.m_data,ch2.m_data) < 0;
}
friend bool operator == (const String &ch1,const String &ch2)
{
cout<<"equal~~~!"<<endl;
return strcmp(ch1.m_data,ch2.m_data)==0;
}
friend bool operator != (const String &ch1,const String &ch2)
{
cout<<"Not equal~~!"<<endl;
return (strcmp(ch1.m_data,ch2.m_data)==0) ? true:false;
}
String operator+(const String &ch)
{
char *str;
str = new char[strlen(m_data)+strlen(ch.m_data)+1];
strcpy(str,m_data);
strcat(str,ch.m_data);
String tmp(str);
delete []str;
return tmp;
/*
String tmp;
tmp.m_data = new char[strlen(m_data)+strlen(ch.m_data)+1];
strcpy(tmp.m_data,m_data);
strcat(tmp.m_data,ch.m_data);
return tmp;
*/
}
String operator+=(const String &ch)
{
*this = *this->m_data + ch.m_data;
return *this;
/* String tmp;
tmp.m_data = new char[strlen(m_data)+strlen(ch.m_data)+1];
strcpy(tmp.m_data,m_data);
strcat(tmp.m_data,ch.m_data);
*this = tmp;
return *this;
*/
}
char& operator[](int index)
{
return m_data[index];
}
friend ostream& operator<<(ostream& os,const String &str)
{
os<<str.m_data;
return os;
}
friend istream& operator>>(istream& is,const String &str)
{
is>>str.m_data;
return is;
}
~String()
{
delete []m_data;
}
private:
char* m_data;
};
void main()
{
String ch1;
String ch6(10);
String str("j");
ch6 = "sdfsfsdfsfs";
String ch(str);
ch1 = str;
//cout<<(str+ch1)<<endl;
ch = str + ch1 ;
//cout<<ch<<endl;
String ch2;
ch2+=ch;
cout<<ch2<<endl;
ch1 != ch2;
ch[2];
cout<<str<<endl;
cin>>ch1; //cin以空格为一次读取标记
cout<<ch1<<endl;
}