#include <iostream>
using namespace std;
class String
{
public:
String();
String(const char*const ch);
int getlen()const { return len;}
friend ostream&operator<<(ostream &o, const String &s)
{
o<<s.str;
return o;
}
friend istream&operator>>(istream &i, String &s)
{
i>>s.str;
return i;
}
friend bool operator<(const String&str1, const String&str2)
{
if(strcmp(str1.str, str2.str) < 0){
return 1;
}else
return 0;
}
friend bool operator>(const String&str1, const String&str2)
{
if(strcmp(str1.str, str2.str) > 0){
return 1;
}else
return 0;
}
friend bool operator==(const String&str1, const String&str2)
{
if(strcmp(str1.str, str2.str) == 0){
return 1;
}else
return 0;
}
char &operator[](unsigned short int length);
char operator[](unsigned short int length)const;
String (const String&r);
String &operator=(const String &s);
private:
unsigned short int len;
char *str;
};
String::String()
{
len = 0;
str = new char[1];
str[0] = '\0';
};
String::String(const char*const ch)
{
len = strlen(ch);
str = new char[len+1];
for(int i=0; i<len; i++){
str[i] = ch[i];
}
str[len] = '\0';
};
char & String::operator[](unsigned short int length)
{
if(length > len){
return str[len-1];
}else{
return str[length];
}
};
char String::operator[](unsigned short int length)const
{
cout<<"下标运算符const执行"<<endl;
if(length > len){
return str[len-1];
}else{
return str[length];
}
};
String::String (const String&rs)
{
len = rs.getlen();
str = new char[len+1];
for(int i=0; i<len; i++){
str[i] = rs[i];
}
str[len]='\0';
cout<<"复制构造函数完成:"<<str<<endl;
};
String& String::operator=(const String &s)
{
cout<<"operator=执行"<<endl;
if(this == &s)
{
return *this;
}else{
delete []str;
len = s.getlen();
str = new char[len+1];
for(int i=0; i<len; i++){
str[i] = s[i];
}
str[len] = '\0';
}
return *this;
}
int main()
{
String s1("aaa");
cout<<"s1=aaa"<<endl;
String s2("bbb");
cout<<"s2=bbb"<<endl;
int ch1 = s1>s2;
if (ch1=1)
cout<<"s1<s2"<<endl;
else cout<<"s2>=s1"<<endl;
String s3("aaa");
cout<<"s3=aaa"<<endl;
int ch3 = s1==s3;
if (ch3=1)
cout<<"s1s3相等"<<endl;
else cout<<"并不相等"<<endl;
int ch4 = s2==s3;
if (ch4=1)
cout<<"s2s3并不相等"<<endl;
else cout<<"相等"<<endl;
return 0;
}