++/-- 运算符有前置/后置之分
-
前置运算符作为一元运算符重载
- 重载为成员函数:
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 <iostream>
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
- 重载运算符(),【】,->或者赋值运算符=时,重载函数必须声明为类的成员函数