C++ - 自加/自减运算符的重载

  • ++/-- 运算符有前置/后置之分

  • 前置运算符作为一元运算符重载

    • 重载为成员函数:
      T operator++();
      T operator--();
    • 重载为全局函数:
      T operator++(T);
      T operator--(T);
  • ++obj,obj,operator++(),operator++(obj)都调用上述函数

  • 后置运算符作为二元运算符重载

    • 多写一个参数,只是标示这个重载运算符是后置的,没有其他意义
    • 重载为成员函数:
      T operator++(int);
      T operator--(int);
    • 重载为全局函数:
      T operator++(T,int);
      T operator--(T,int);
  • obj++,obj,operator++(0),operator++(obj,0)都调用上函数

//
//  main.cpp
//  自加自减运算符的重载
//
//  Created by MENGCHEN on 16/1/20.
//  Copyright © 2016年 MENGCHEN. All rights reserved.
//
#include 
using namespace std;
class CDemo {
    int n;
public:
    CDemo(int i):n(i){}
    CDemo operator++();//前置
    CDemo operator++(int);//后置,多了一个 int 参数,只是代表是后置
    operator int(){ return n;}
    friend CDemo operator--(CDemo&);//前置
    friend CDemo operator--(CDemo&,int);//后置,多了一个 int 参数,只是代表是后置的。
};
CDemo CDemo:: operator++(){
    n++;
    return *this;
}
CDemo CDemo:: operator ++(int i){
    CDemo tmp(*this);
    n++;
    return tmp;
}
CDemo operator--(CDemo& a){
    a.n--;
    return a;
}
CDemo operator--(CDemo& a,int){
    a.n--;
    return a;   
}
int main(int argc, const char * argv[]) {
    // insert code here...
    std::cout << "Hello, World!\n";
    return 0;
}
  • int 作为一个类型强制转换运算符被重载,
    Demo s;
    (int)s;
  • 类型强制转换运算符重载时,
    • 不能写返回值类型
    • 实际上其返回值类型 -- 类型强制转换运算符代表的类型

运算符重载的注意事项

  • C++不允许定义新的运算符
  • 重载后运算符的含义应该符合日常习惯
    • complex_a + complex_b;
    • word_a > word_b
    • date_b = date_a+n;
  • 运算符重载不改变运算符的优先级
  • 一下运算符是不能被重载的:".",".*","::","?:,sizeof
  • 重载运算符(),【】,->或者赋值运算符=时,重载函数必须声明为类的成员函数

你可能感兴趣的:(C++ - 自加/自减运算符的重载)