C++理论复习之运算符重载

来源:互联网 发布:欢乐百世淘宝 编辑:程序博客网 时间:2024/05/17 04:05
  • C++运算符重载

  • 重载操作符的一般格式:

Type operator+(Type A,Type B)
  • 可重载与不可重载的操作符列表:

  • 操作符重载的注意事项

    1. 重载操作符必须有一个类类型的操作数,不能重载内置类型对象的操作符;

    2. 重载操作符不改变原来操作符的优先级;

    3. 重载操作符不保证操作数的求职顺序;如重载&&或||运算符后操作符两边的表达式都会求值且顺序不一定是从左向右;

    4. 重载操作符可能可以定义为成员函数或非成员函数,定义为非成员函数时要定义为友元函数,要看具体的运算符;

    5. 使用操作符重载有两种选择,一种是和调用成员函数一样的格式,另一种是和操作符的使用格式相同;

      cout<<item+item2<<endl;cout<<Operator+(item1,item2)<<endl;

    6. 有些操作符有内置含义,有需要是再重载,如赋值运算符,默认将一个类的成员变量赋给另一个类;取地址(&)和逗号运算符(,)和默认含义相同,重载&&或||会改变运算符的短路求值特性;

    7. 要做含义清晰的操作符重载,不要将+号重载为-号的功能,这样不易理解。

    8. 重载要将一些运算符作为整体都重载,比如重载>,也应将<,>=,<=,==都重载,否则在使用上会不符合常规的理解,但如果默写比较没有对应的含义,不定义更好;

    9. 选择成员函数和非成员函数的实现方式的一些指导原则:

      • 赋值=,下标[],调用(),成员访问箭头-> 必须定义为成员;

      • 改变对象状态的运算符一般定义为成员函数,如自增,自减;

      • 对称的操作符一般定义为非成员函数;

  • 重载输出操作符<<

    1. 格式

      ostream& operator <<(ostream &os,const ClassType &object){     os<<.......;     return os;}

      ostream& operator <<(ostream &os, ClassType &object){     os<<.......;     return os;}

      有const参数的可以接受const类型的参数;

    2. 注意事项

                      IO操作必须是非成员函数,因为它的左操作数不是类类型;

                     输出操作应当尽量少的写格式字符,只输出内容,这样更符合正常的输出的功能;

  • 重载输入操作符>>

    1. 格式
      istream& operator>>(istream &in,ClassType & s){      in>>s.i>>s.k;      if(in)      {.....}      else      {.....}}

    2. 注意事项

                       和输出重载相同,也是非成员函数;

                      输入应当处理输入错误,比如输入流错误或是输入流正确,但输入内容不正确等;具体的处理的原则是保持数据的一致性,不能类中部分数据赋值了,但另一部分赋值失败了,可以在失败时将类用默认构造函数重新构造一遍,使其存储默认值

  • 加号运算符+

                  

ClassType operator+(const ClassType& lhs,const ClassType& rhs){      ClassType ret(lhs);      ret+=rhs;      return ret;}

加法运算符返回一个右值;

  • 相等,不等运算符

inline operator ==(const Class_Type &A,Class_Type B){     return bool;}


inline operator !=(const Class_Type &A,Class_Type B){     return bool;}





0 0
原创粉丝点击