大部分的代码来自于零起点学通C++
#include <iostream>
#include <cstring>
using namespace std;
class String
{
public:
String();
~String();
String(const char *const ch);
String(const String &t);
char &operator[](unsigned short int length);
char operator[](unsigned short int length)const;
String operator+(const String &a);
String &operator=(const String &a);
void operator+=(const String &a);
friend ostream &operator<<(ostream &os,const String &t)
{
os<<t.str<<endl;
return os;
}
friend istream &operator>>(istream &in,String &t)
{
in>>t.str;
return in;
}
friend bool operator<(const String &a,const String &b)
{
if (strcmp(a.str,b.str)<0)
return 1;
else
return 0;
}
friend bool operator>(const String &a,const String &b)
{
if (strcmp(a.str,b.str)>0)
return 1;
else
return 0;
}
friend bool operator==(const String &a,const String &b)
{
if (strcmp(a.str,b.str)==0)
return 1;
else
return 0;
}
unsigned short int getlength()const{return length;}
const char *getstr()const{return str;}
private:
int length;
char *str;
String(unsigned short int);
};
String::String(unsigned short int len)
{
str = new char[len+1];
for (int i=0;i<=len;i++)
{
str[i] = '\0';
}
length = len;
}
String String::operator+(const String&t)
{
int length_total = length + t.getlength();
String temp(length_total);
int i,j;
for (i=0;i<length;i++)
{
temp[i] = str[i];
}
for(j=0;j<t.getlength();j++,i++)
temp[i] = t[j];
temp[length_total] = '\0';
return temp;
}
//
char &String::operator[](unsigned short int len)
{
if (len>length)
return str[length-1];
else
return str[len];
}
char String::operator[](unsigned short int len)const
{
if(len>length)
return str[length-1];
else
return str[len];
}
String::~String()
{
delete []str;
length = 0;
}
///
String::String()
{
length = 0;
str = new char[1];
str[0] = '\0';
}
/
String::String(const char *const ch)
{
length = strlen(ch);//将得到的字符数组长度给length
str = new char[length+1];//
for (int i=0;i<length;i++)
str[i] = ch[i];
str[length] = '\0';//这一步非常重要,表示复制的字符串结束了
}
String::String(const String &t)
{
length = t.getlength();
str = new char[length+1];
for(int i=0;i<length;i++)
str[i] = t[i];
str[length]='\0';
}
String &String::operator=(const String & s)
{
if (this == &s)
{
return *this;
}
delete []str;
length = s.getlength();
str = new char[length +1];
for(int i=0;i<length;i++)
{
str[i] = s[i];
}
str[length] = '\0';
return *this;
}
/
void String::operator+=(const String &t)
{
int length_total = length+t.getlength();
String temp(length_total);
int i,j;
for (i=0;i<length;i++)
{
temp[i] = str[i];
}
for(j=0;j<t.getlength();j++,i++)
temp[i] = t[j];
temp[length_total] = '\0';
*this = temp;
}
void main()
{
String str;
cout<<"str:"<<str.getstr()<<"共"<<str.getlength()<<"个字符"<<endl;
String str1("china");
cout<<"str1:"<<str1.getstr()<<"共"<<str1.getlength()<<"个字符"<<endl;
char *temp = "English";
String str2(temp);//构造函数
cout<<"str2:"<<str2.getstr()<<"共"<<str2.getlength()<<"个字符"<<endl;
cout<<"please input a character:\n";
int number;
cout<<"输入你想输入的下标";
cin>>number;
cout<<"输入一个字符";
cin>>str[number];
if (number>=str2.getlength())
cout<<"the length of the string is "<<str2.getlength()
<<"the number you input is overflow"<<endl;
cout<<str2[number]<<endl;
String str3 = "mother";
String str4("father");
cout<<"str3:"<<str3<<endl;
cout<<"str4:"<<str4<<endl;
String str5 = str3+str4;
cout<<"str5:"<<str5<<endl;
system("pause");
}