运算符重载(C++)2

来源:互联网 发布:java 网店系统 手机 编辑:程序博客网 时间:2024/05/23 18:02

接着上次的运算符重载:
先给出以下代码用于引出后面的运算符重载函数:

class STR{public:    STR(char *str= "") //构造函数    {        m_str = new char[strlen(str)+1];        strcpy(m_str, str);    }    STR(char c)   //构造函数    {        m_str = new char[2];        m_str[0] = c;        m_str[1] = '\0';    }    STR(char c, int n)   //构造函数    {        m_str = new char[n+1];        memset(m_str, c, n);   //关键        m_str[n] = '\0';   //注意是m_str[n] = '\0'    }    ~STR()    //析构函数    {        if(m_str != NULL)        {            delete []m_str;            m_str = NULL;        }    }    STR(STR &s)    //拷贝构造函数    {        m_str = new char[strlen(s.m_str)+1];        strcpy(m_str, s.m_str);    }    void print()    {        cout<<m_str<<endl;    }private:    char *m_str;};void main(){    STR a("abcd");    a.print();    STR b('e');    b.print();    STR c('f',3);    c.print();}
  1. 赋值运算符重载:
STR& STR:: operator=(STR &s)   //赋值重载函数    {        if(this == &s)      //判断赋值的内容是否一样            return *this;        if(m_str != NULL)           {            delete []m_str;   //将m_str的空间释放        }        m_str = new char[strlen(s.m_str)+1];  //为m_str重新开辟空间        strcpy(m_str, s.m_str);   //将s.m_str的内容复制到m_str中        return *this;    }    //主函数    void main(){    STR a("abcd");    a.print();    STR b('e');    b.print();    STR c('f',3);    c.print();    (a=b).print();}

运行结果如下:
这里写图片描述
2. 加法运算符:

STR STR::operator+(STR &s)    {        char *p = new char[strlen(m_str) + strlen(s.m_str) + 1];  //因为要将两个字符串连接起来,所以要先开辟一个能存放两个字符串的空间        strcpy(p, m_str);  //先将m_str拷贝到p中        strcat(p, s.m_str); // 再将s.m_str连接到p的后面        STR t(p);     //因为要将p空间释放掉,所以必须将p中的内容放在一个对象中        delete []p;  //将p释放掉        p = NULL;        return t;    //将t返回    }    //主函数    void main(){    STR a("abcd");    a.print();    STR b('e');    b.print();    STR c('f',3);    c.print();    (a+b).print();}

运行结果:
这里写图片描述
3. +=运算符重载:

STR& STR:: operator+=(STR &s)    {        char *p = new char[strlen(m_str) + strlen(s.m_str) + 1];        strcpy(p,m_str);        strcat(p,s.m_str);        m_str = p;        return *this;    }    //主函数    void main(){    STR a("abcd");    a.print();    STR b('e');    b.print();    STR c('f',3);    c.print();    (a+=c).print();}

测试结果如下:
这里写图片描述
4. [ ]运算符重载:

char STR:: operator[](int i)    {        if(i>0 && i<strlen(m_str))            return m_str[i];    }    //主函数    void main(){    STR a("abcd");    a.print();    STR b('e');    b.print();    STR c('f',3);    c.print();    cout<<a[3]<<endl;}

运行结果:
这里写图片描述
5. ==运算符重载:

bool STR::operator==(STR &s)    {        return strcmp(m_str,s.m_str) == 1;    }    //主函数    void main(){    STR a("abcd");    a.print();    STR b('e');    b.print();    STR c('f',3);    c.print();    cout<<(a==c)<<endl;}

运行结果:
这里写图片描述
以下的运算符重载就不给运行结果了:
6. !=运算符重载:

bool STR::operator!=(STR &s)    {         return !(*this==s); //或者写成return !(m_str==s.m_str);    }
  1. >运算符重载:
bool STR::operator>(STR &s)    {        return strcmp(m_str,s.m_str)==1;    }

8.

operator char*()   //类型转换    {        return m_str;    }
原创粉丝点击