• C++ ++ 和 -- 运算符重载


    C++ ++ 和 -- 运算符重载

    递增运算符( ++ )和递减运算符( -- )是 C++ 语言中两个重要的一元运算符。

    下面的实例演示了如何重载递增运算符( ++ ),包括前缀和后缀两种用法。类似地,您也可以尝试重载递减运算符( -- )。

    递增运算符( ++ )和递减运算符( -- )是 C++ 语言中两个重要的一元运算符。

    下面的实例演示了如何重载递增运算符( ++ ),包括前缀和后缀两种用法。类似地,您也可以尝试重载递减运算符( -- )。

    递增运算符( ++ )和递减运算符( -- )是 C++ 语言中两个重要的一元运算符。

    下面的实例演示了如何重载递增运算符( ++ ),包括前缀和后缀两种用法。类似地,您也可以尝试重载递减运算符( -- )。

    递增运算符( ++ )和递减运算符( -- )是 C++ 语言中两个重要的一元运算符。

    下面的实例演示了如何重载递增运算符( ++ ),包括前缀和后缀两种用法。类似地,您也可以尝试重载递减运算符( -- )。

    递增运算符( ++ )和递减运算符( -- )是 C++ 语言中两个重要的一元运算符。

    下面的实例演示了如何重载递增运算符( ++ ),包括前缀和后缀两种用法。类似地,您也可以尝试重载递减运算符( -- )。

    递增运算符( ++ )和递减运算符( -- )是 C++ 语言中两个重要的一元运算符。

    下面的实例演示了如何重载递增运算符( ++ ),包括前缀和后缀两种用法。类似地,您也可以尝试重载递减运算符( -- )。

    实例

    1. #include
    2. using namespace std;
    3. class Time
    4. {
    5. private:
    6. int hours; // 0 到 23
    7. int minutes; // 0 到 59
    8. public:
    9. // 所需的构造函数
    10. Time(){
    11. hours = 0;
    12. minutes = 0;
    13. }
    14. Time(int h, int m){
    15. hours = h;
    16. minutes = m;
    17. }
    18. // 显示时间的方法
    19. void displayTime()
    20. {
    21. cout << "H: " << hours << " M:" << minutes <
    22. }
    23. // 重载前缀递增运算符( ++ )
    24. Time operator++ ()
    25. {
    26. ++minutes; // 对象加 1
    27. if(minutes >= 60)
    28. {
    29. ++hours;
    30. minutes -= 60;
    31. }
    32. return Time(hours, minutes);
    33. }
    34. // 重载后缀递增运算符( ++ )
    35. Time operator++( int )
    36. {
    37. // 保存原始值
    38. Time T(hours, minutes);
    39. // 对象加 1
    40. ++minutes;
    41. if(minutes >= 60)
    42. {
    43. ++hours;
    44. minutes -= 60;
    45. }
    46. // 返回旧的原始值
    47. return T;
    48. }
    49. };
    50. int main()
    51. {
    52. Time T1(11, 59), T2(10,40);
    53. ++T1; // T1 加 1
    54. T1.displayTime(); // 显示 T1
    55. ++T1; // T1 再加 1
    56. T1.displayTime(); // 显示 T1
    57. T2++; // T2 加 1
    58. T2.displayTime(); // 显示 T2
    59. T2++; // T2 再加 1
    60. T2.displayTime(); // 显示 T2
    61. return 0;
    62. }

    当上面的代码被编译和执行时,它会产生下列结果:

    H: 12 M:0
    H: 12 M:1
    H: 10 M:41
    H: 10 M:42

    注意,int 在 括号内是为了向编译器说明这是一个后缀形式,而不是表示整数。

    前缀形式重载调用 Check operator ++ () ,后缀形式重载调用 operator ++ (int)。

    实例 (++ 重载)

    1. #include
    2. using namespace std;
    3. class Check
    4. {
    5. private:
    6. int i;
    7. public:
    8. Check(): i(0) { }
    9. Check operator ++ ()
    10. {
    11. Check temp;
    12. temp.i = ++i;
    13. return temp;
    14. }
    15. // 括号中插入 int 表示后缀
    16. Check operator ++ (int)
    17. {
    18. Check temp;
    19. temp.i = i++;
    20. return temp;
    21. }
    22. void Display()
    23. { cout << "i = "<< i <
    24. };
    25. int main()
    26. {
    27. Check obj, obj1;
    28. obj.Display();
    29. obj1.Display();
    30. // 调用运算符函数,然后将 obj 的值赋给 obj1
    31. obj1 = ++obj;
    32. obj.Display();
    33. obj1.Display();
    34. // 将 obj 赋值给 obj1, 然后再调用运算符函数
    35. obj1 = obj++;
    36. obj.Display();
    37. obj1.Display();
    38. return 0;
    39. }

    执行输出结果为:

    i = 0
    i = 0
    i = 1
    i = 1
    i = 2
    i = 1

    实例 (-- 重载)

    1. #include
    2. using namespace std;
    3. class Check
    4. {
    5. private:
    6. int i;
    7. public:
    8. Check(): i(3) { }
    9. Check operator -- ()
    10. {
    11. Check temp;
    12. temp.i = --i;
    13. return temp;
    14. }
    15. // 括号中插入 int 表示后缀
    16. Check operator -- (int)
    17. {
    18. Check temp;
    19. temp.i = i--;
    20. return temp;
    21. }
    22. void Display()
    23. { cout << "i = "<< i <
    24. };
    25. int main()
    26. {
    27. Check obj, obj1;
    28. obj.Display();
    29. obj1.Display();
    30. // 调用运算符函数,然后将 obj 的值赋给 obj1
    31. obj1 = --obj;
    32. obj.Display();
    33. obj1.Display();
    34. // 将 obj 赋值给 obj1, 然后再调用运算符函数
    35. obj1 = obj--;
    36. obj.Display();
    37. obj1.Display();
    38. return 0;
    39. }

    执行输出结果为:

    i = 3
    i = 3
    i = 2
    i = 2
    i = 1
    i = 2
  • 相关阅读:
    Vector和ArrayList的扩容
    518. 零钱兑换II(完全背包问题)
    Excel 一列数据转换为多行数据
    vector模拟实现——关于模拟中的易错点
    思腾云计算
    WINDOWS核心编程--Windows程序内部运行机制
    linux:将进程切换到后台且不退出
    python基础环境
    零基础通信基础知识入门(4G/5G通信知识入门书籍)
    课题学习(三)----倾角和方位角的动态测量方法(基于陀螺仪的测量系统)
  • 原文地址:https://blog.csdn.net/DUXS11/article/details/126398335