zoukankan      html  css  js  c++  java
  • 运算符重载详解

    运算符重载

    提高程序的可读性

    如果一个类没有提供赋值运算符,则默认提供一个 (浅拷贝)

    如果一个类提供了拷贝构造函数,那么也要提供一个重载的赋值运算函数


    Person& Person::operator=(const Person &other)
    {
    if(this==&other)
    return *this;
    delete[]m_data;

    int length=strlen(other.m_data);
    m_data=new char[length+1];
    strcpy(m_data,other.m_data);

    return *this;
    }

    C++语言规定
    1重载的运算符要保持有原有运算符的意义
    2.只能对已有的运算符重载,不能增加新的运算符
    3.重载该的运算符不会改变原先的优先级和结合性

    运算符重载的形式
    成员函数
    友元函数

    RMB operator+(const RMB& s1,const RMB& s2)
    {
    unsigned int jf=s1.jf+s2.jf;
    unsigned int yuan=s1.yuan+s2.yuan;
    RMB reult(yuan,jf);
    return result;
    }

    RMB operator>(const RMB& s1,const RMB& s2)
    {
    bool ret=false;
    if(s1.yuan>s2.yuan)
    return true;
    else if(s1.yuan==s2.yuan)
    {
    if(s1.jf>s2.jf)
    return true;
    }
    return ret;
    }

    运算符重载作为成员函数
    作为成员的运算符比之作为非成员函数的运算符,在声明和定义时,
    在形式上少一个参数。
    RMB RMB::operator+(const RMB& s)
    {
    unsigned int c=jf+s.if;
    unsigned int d=yuan+s.yuan;
    return RMB(c,d);
    }


    C++规定:=,(),[],->这四种运算符必须为成员函数形式

    ++和--运算符重载

    前增量和后增量的区别

    使用前增量时,对对象(操作数)进行增量修改,然后再返回该对象

    使用后增量时,必须在对象之前返回原有的对象值

    class Increase
    {
    public:
    Increase(int x):value(x){}
    Increase& operator++(); //前增量
    Increase operator++(int); //后增量 int这里没有什么意义 是规定 只是为了区别前后增量
    /*前增量和后增量操作的意义,决定了其不同的返回方式。
    前增量运算符返回引用,后增量运算符返回值*/
    private:
    int value;
    }

    ++成员函数 的实现
    Increase& Increase::operator++()
    {
    value++; //前增量
    return *this; //再返回原对象
    }

    Increase Increase::operator++(int)
    {
    Increase temp(*this); //临时对象存放原有对象值
    value++; //原有对象增量修改
    return temp;
    }


    ++的非成员形式的重载
    friend Increase& operator++(Increase &); //前增量
    friend Increase operator++(Increase &,int); //后增量


    friend Increase& operator++(Increase &a)
    {
    a.value++;
    return a;
    }

    friend Increase operator++(Increase &a,int)
    {
    Increase temp(a);
    a.value++;
    return temp;
    }

  • 相关阅读:
    Eclipse查看git中的历史,显示详细时间
    eclipse git pull 代码 failed 并且报DIRTY_WORKTREE.classpath
    ResultMap(还没细看)
    mybatis中<include>标签的作用
    mybatis之<trim prefix="" suffix="" suffixOverrides="" prefixOverrides=""></trim>
    hdu 1285 确定比赛名次(拓扑排序)
    hdu 1257 最少拦截系统
    java 高精度模板
    最小生成树 hdu 1233 模板题
    manacher算法 O(n) 求字符串中最长回文子串 hdu 3068(模板题)
  • 原文地址:https://www.cnblogs.com/zsq1993/p/6057181.html
Copyright © 2011-2022 走看看