Bootstrap

c++中mystring运算符重载

#include <iostream>
#include <cstring>

using namespace std;

class mystring
{
    char* buf;
public:
    mystring(); //构造函数
    mystring(const char * str); //构造函数
    mystring(const mystring& str); //深拷贝函数
    void show(); //输出函数
    void setmystr(const mystring& str); //设置函数
    const char* getmystr() const; //获取函数
    void append(const mystring& str); //追加函数
    int isEqual(const mystring& str); // 比较函数
    void swap(mystring& str);//交换函数
    ~mystring(); //析构函数
/****************************************************************************/
    mystring& operator+(const mystring& str);//+
    mystring& operator=(const mystring& str);//=
    mystring& operator+=(const mystring& str);//+=
    bool operator==(const mystring& str);//==
    bool operator!=(const mystring& str);// !=
    mystring& operator++();//前++
    mystring operator++(int);//后++
    char operator[](const int index);//[]
    friend ostream& operator<<(ostream& out , const mystring& str);//cout << mystring
    friend istream& operator>>(istream& in , const mystring& str);//cin >> mystring
};

/****************************************************************************/
//+
mystring& mystring::operator+(const mystring& str)
{
    this->append(str);
    return *this;
}
//=
mystring& mystring::operator=(const mystring& str)
{
    int len = strlen(str.buf);
    buf = new char[len+1];
    strcpy(buf , str.buf);
    return *this;
}
//+=
mystring& mystring::operator+=(const mystring& str)
{
    this->append(str);
    return *this;
}
//==
bool mystring::operator==(const mystring& str)
{
    if (strcmp(this->buf , str.buf) == 0 )
        return true;
    else
        return false;
}
// !=
bool mystring::operator!=(const mystring &str)
{
    if(strcmp(buf , str.buf) == 0)
        return false;
    else
        return true;
}
//++
mystring& mystring::operator++()
{
    char * p = buf;
    while (*p != '\0') {
        ++(*p);
        p++;
    }
    return *this;
}
//后++
mystring mystring::operator++(int)
{
    mystring temp = *this;
    char * p = buf;
    while (*p != '\0') {
        ++(*p);
        p++;
    }
    return temp;
}
//[]
char mystring::operator[](const int index)
{
    int len = strlen(buf);
    if(index < len)
    {
        char * p = buf;
        return *(p+index);
    }
    return '\0';
}
//cout << mystring
ostream& operator<<(ostream& out , const mystring& str)
{
    out << str.buf;
    return out;
}
//cin >> mystring
istream& operator>>(istream& in , const mystring& str)
{
    in >> str.buf;
    return in;
}


/****************************************************************************/
//构造函数
mystring::mystring()
{
    buf = new char[1];
}
//构造函数
mystring::mystring(const char * str)
{
    int len = strlen(str);
    buf = new char[len+1];
    strcpy(buf , str);
}
//深拷贝函数
mystring::mystring(const mystring& str)
{
    int len = strlen(str.buf);
    buf = new char[len+1];
    strcpy(buf , str.buf);
}
//打印函数
void mystring::show()
{
    cout << buf << endl;
}
//设置函数
void mystring::setmystr(const mystring& str)
{
    free(this->buf);
    int len = strlen(str.buf);
    this->buf = new char[len+1];
    strcpy(this->buf , str.buf);
}
//获取函数
const char* mystring::getmystr() const
{
    return buf;
}
//追加函数
void mystring::append(const mystring& str)
{
    int len1 = strlen(this->buf);
    char* temp = new char[len1+1];
    memset(temp , 0 , len1+1);
    strcpy(temp , this->buf);
    delete[] buf;

    int len2 = strlen(str.buf);
    this->buf = new char[len1+len2+1];
    memset(buf , 0 , len1+len2+1);
    strcat(this->buf , temp);
    strcat(this->buf , str.buf);
}
//比较函数
int mystring::isEqual(const mystring& str)
{
    if(strcmp(buf , str.buf) > 0)
    {
        return 1;
    }
    else if(strcmp(buf , str.buf) < 0)
    {
        return -1;
    }
    else
        return 0;
}
//交换函数
void mystring::swap(mystring& str)
{
    char * temp = this->buf;
    this->buf = str.buf;
    str.buf = temp;
}
//析构函数
mystring::~mystring()
{
    delete[] buf;
}

int main()
{
    mystring ptr;
    mystring str = "hello world";
    str.show();
    ptr.setmystr("hello kitty");
    cout << ptr.getmystr() << endl;

    mystring qtr;
    qtr = ptr + str;
    qtr.show();

/*	ptr += str;
    ptr.show();  	*/

/*	if(ptr == str){}
    else{
        cout << "== success" << endl;
    } 				*/

/*	if(ptr != str)
    {
        cout << "!= success" << endl;
    }  				*/

/*	mystring temp = str++;
    temp.show();
    str.show(); 	*/

//	cout << str[0] <<  str[3] << str[8] << endl;

    mystring ttr;
    cout << "请输入:";
    cin >> ttr;
    cout << ttr;
    cout << endl;
    return 0;
}

;