Integer.h

  1. /* 
  2. ++运算符的重载 
  3. */ 
  4.  
  5. #ifndef _INTEGER_H_ 
  6. #define _INTHGER_H_ 
  7. class Integer 
  8. private: 
  9.     int n_; 
  10. public: 
  11.     Integer(int); 
  12.     ~Integer(void); 
  13.     //此处用const修饰有什么用 
  14.     void  display() const; 
  15.     // 前置++  声明 
  16.     //成员函数++重载 
  17.     //Integer& operator ++(); 
  18.  
  19.     //前置 ++ 友元函数重载 
  20.  
  21.     friend Integer& operator ++(Integer& n); 
  22.  
  23.  
  24.     //后置 ++声明 
  25.  
  26.     //后置++ 成员函数重载声明 
  27.  
  28.     Integer  operator ++(int n); 
  29.  
  30.     //后置++  友元函数重载 
  31.  
  32.     friend Integer operator ++(Integer& in,int n); 
  33.  
  34. }; 
  35. #endif //_INTHGER_H_ 

Integer.cpp

  1. #include "Integer.h" 
  2. #include <iostream> 
  3.  
  4. using namespace std; 
  5.  
  6. //使用初始化列表 
  7. Integer::Integer(int n): n_(n) 
  8. {  
  9.  
  10. Integer::~Integer(void) 

  11. void Integer::display()  const { 
  12.  
  13.     cout<<n_<<endl
  14.  
  15. // 实现前置++的方法重载 
  16.  
  17. //注意:如果返回类型是 Integer将会调用拷贝构造函数,返回的是一个新的Integer类 
  18. //       如果返回类型是Integer& 将会返回的当前对象 
  19. //Integer& Integer::operator++(){ 
  20. // 
  21. // 
  22. //  ++n_;//是前置++  
  23. // 
  24. //  /** 
  25. //  *  为什么返回的是 *this  ?? 
  26. //     解答: 
  27. //     this 是当前对象的指针, *this就是当前对象 
  28. // 
  29. //  **/ 
  30. //  return *this; 
  31. //} 
  32.  
  33. Integer& operator ++(Integer& n){ 
  34.     ++n.n_; 
  35.     return n; 
  36.  
  37. //后置++ 成员函数重载 实现 
  38. Integer  Integer::operator++(int n){ 
  39.  
  40.     cout<<"后置++"<<endl
  41.  
  42.     //实例化一个temp的临时Integer类,将其返回,但将n_进行+1操作 ,返回的temp的n_没有进行+1操作 
  43.     //这符合后置++  ,先使用值,再将其+1的特性 
  44.     Integer temp(n_); 
  45.     n_++; 
  46.  
  47.     return temp; 
  48.  
调用方式:
  1. Integer n1(10); 
  2. n1.display(); 
  3. //n1.operator++(); 
  4. Integer n2 =++n1; 
  5. //前置++  调用形式 
  6. ++n1; 
  7. //为什么在这里再操作n1,n2却不跟着改变值? 
  8. //n1.operator++(); 
  9. //++n2; 
  10. n1.display(); 
  11. n2.display(); 
  12.  
  13. Integer n3(17); 
  14. //后置++  成员函数 两种调用形式 
  15. Integer n4 =n3++;  // n3.operator++(9); 
  16. n3.display(); 
  17. n4.display();