手写C++中string类(编译时多态:运算符重载)

Mystring.h
#ifndef _MYSTRING_H_
#define _MYSTRING_H_
#include<iostream>
using namespace std;
class Mystring
{
    private:
        int m_length;
        char *String;
    public:
        Mystring();
        Mystring(char *s);
        Mystring(const Mystring &s);
        Mystring(int a,char ch);
        friend ostream &operator <<(ostream &out,const Mystring &s);
        friend istream &operator >>(istream &in,Mystring &s);
        char operator [](int index);
        Mystring operator = (const Mystring &s);
        Mystring operator = (char *s);
        Mystring operator + (const Mystring &s);
        Mystring operator +(char *s);
        Mystring operator += (const Mystring &s);
        Mystring operator +=(char *s);
        bool operator ==(const Mystring &s);
        bool operator ==(char *s);
        bool operator !=(const Mystring &s);
        bool operator !=(char *s);
        bool operator >(const Mystring &s);
        bool operator >(char *s);
        bool operator <(const Mystring &s);
        bool operator <(char *s);
        bool operator >=(const Mystring &s);
        bool operator >=(char *s);
        bool operator <=(const Mystring &s);
        bool operator <=(char *s);

        ~Mystring();
};
#endif

Mystring.cpp

#include<iostream>
#include<cstring>
using namespace std;
#include"Mystring.h"
Mystring::Mystring()
{
    m_length=0;
    String=NULL;
}
Mystring::Mystring(char *s)
{
    m_length=strlen(s);
    String=new char [m_length+1];
    strcpy(String,s);
}
Mystring::Mystring(int a,char ch)
{
    m_length=a;
    int i=0;
    String=new char [m_length+1];
    for(i=0;i<a;i++)
    {
        String[i]=ch;
    }
    String[m_length]='\0';
}
Mystring::Mystring(const Mystring &s)
{
    m_length=s.m_length;
    String=new char [m_length+1];
    strcpy(String,s.String);

}
ostream &operator <<(ostream &out,const Mystring &s)
{
    out<<s.String;
    return out;
}
istream &operator >>(istream &in,Mystring &s)
{
    char temp[100]={'\0' };
    in>>temp;
    s.m_length=strlen(temp);
    s.String=new char[s.m_length+1];
    strcpy(s.String,temp);
    return in;
}
Mystring Mystring::operator = (const Mystring &s)
{
    if(String!=NULL)
    {
        delete String;
        String=NULL;
    }
    m_length=s.m_length;
    String=new char [m_length+1];
    strcpy(String,s.String);
    return *this;
}


Mystring Mystring::operator = (char *s)
{
    if(String!=NULL)
    {
        delete String;
        String=NULL;
    }
    m_length=strlen(s);
    String=new char [m_length+1];
    strcpy(String,s);
    return *this;
}

char Mystring:: operator [](int index)
{
    return String[index];
}

Mystring Mystring::operator +(const Mystring &s)
{
    Mystring temp;
    temp.m_length=m_length+s.m_length;
    temp.String=new char[temp.m_length+1];
    strcpy(temp.String,String);
    strcat(temp.String,s.String);
    temp.String[temp.m_length]='\0';
    return temp;
}

Mystring Mystring::operator +(char *s)
{
    Mystring temp;
    temp.m_length=m_length+strlen(s);
    temp.String=new char[temp.m_length+1];
    strcpy(temp.String,String);
    strcat(temp.String,s);
    temp.String[temp.m_length]='\0';
    return temp;
}

Mystring Mystring::operator +=(const Mystring &s)
{
    char*temp=String;
    m_length=m_length+s.m_length;
    String=new char[m_length+1];
    strcpy(String,temp);
    strcat(String,s.String);
    String[m_length]='\0';
    delete temp;
    return *this;
}
Mystring Mystring::operator +=(char *s)
{
    char *temp=String;
    m_length=m_length+strlen(s);
    String=new char[m_length+1];
    strcpy(String,temp);
    strcat(String,s);
    String[m_length]='\0';
    delete temp;
    return *this;
}
bool Mystring::operator == (const Mystring &s)
{
    if(strcmp(String,s.String)==0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
bool Mystring::operator == (char *s)
{
    if(strcmp(String,s)==0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
bool Mystring::operator != (const Mystring &s)
{
    if(strcmp(String,s.String)!=0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
bool Mystring::operator != (char *s)
{
    if(strcmp(String,s)!=0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
bool Mystring::operator > (const Mystring &s)
{
    if(strcmp(String,s.String)>0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
bool Mystring::operator > (char *s)
{
    if(strcmp(String,s)>0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
bool Mystring::operator < (const Mystring &s)
{
    if(strcmp(String,s.String)<0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
bool Mystring::operator < (char* s)
{
    if(strcmp(String,s)<0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
bool Mystring::operator >= (const Mystring &s)
{
    if(strcmp(String,s.String)>=0)
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool Mystring::operator >= (char *s)
{
    if(strcmp(String,s)>=0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
bool Mystring::operator <= (const Mystring &s)
{
    if(strcmp(String,s.String)<=0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
bool Mystring::operator <= (char *s)
{
    if(strcmp(String,s)<=0)
    {
        return true;
    }
    else
    {
        return false;
    }
}

Mystring::~Mystring()
{
    if(String!=NULL)
    {
        delete String;
    }
    String=NULL;
    m_length=0;
}

main.cpp

#include<iostream>
#include"Mystring.h"
int main()
{
    Mystring s1("xiaoshengbucai");
    Mystring s2("weideguniangqinlai");
    Mystring s3(10,'d');
    Mystring s4("gaoci");
    Mystring s5=s2;
    if(s4=="gaoci")
    {
        cout<<"lalala"<<endl;
    }
    else
    {
        cout<<"lululu"<<endl;
    }
    cout<<s1<<endl;
    cout<<s2<<endl;
    cout<<s3<<endl;
    cout<<s4<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zzw_17805056819/article/details/79807507