重载 比较

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值