- 如何区分前置和后置呢?- 前置作为一元运算符重载- 重载为成员函数:
 
 
- 前置作为一元运算符重载
T & operator++();
T & operator—();
- 重载为全局函数
T1 & operator++(T1);
T1 & opeartor—(T2);
- 后置作为二元运算符重载,多写一个没有的参数- 重载为成员函数
 
T & oepartor++(int);
T & oepartor—(int);
- 重载为全局函数
T1 & oepartor++(T2, int);
T1 & oepartor—(T2, int);
- 如果没有后置重载,而有前置重载的情况下。VS中,obj++也调用前置重载,而dev中出错
 对上面的去求,可编出如下的CDemo类- main() {
- CDemo d(5);
- cout << (d++) << ","; // 等价于 d.operator++(0);
- cout << d << ",";
- cout << (++d) << ","; // 等价于 d.operator++();
- cout << d << endl;
- cout << (d--) << ","; // 等价于 d.operator--(d,0);
- cout << d << ",";
- cout << (--d) << ",";
- cout << d << endl;
- }
- 输出:
- 5,6,7,7
- 7,6,5,5
 - class CDemo {
- private:
- int n;
- public:
- CDemo(int i=0):n(i){}
- CDemo & operator++(); // 前置形式
- CDemo operator++(int); // 后置形式
- operator int() { return n;} // 用于 cout << d
- friend CDemo & operator--(CDemo &); // 全局的
- friend CDemo operator--(CDemo & , int);
- };
- CDemo & CDemo::operator++() {
- ++n;
- return *this;
- } // ++s即为s.operator++();
- CDemo CDemo::operator++(int k) {
- CDemo tmp(*this);
- n++;
- return tmp; // 返回修改前的对象
- }
- CDemo & operator--(CDemo & d) {
- d.n--;
- return d;
- }
- CDemo operator--(CDemo & d, int) {
- CDemo tmp(d);
- d.n--;
- return tmp;
- }
 
- 不允许定义新的运算符
- 重载后要符合日常习惯
- 运算符重载不改变运算符的优先级
- 一下运算符不能重载:“.”“.*”“::”“?:”“sizeof”
- 重载运算符()、[]、->或者赋值运算符=时,运算符重载函数必须声明为类的成员函数
 
                         
                                

