zoukankan      html  css  js  c++  java
  • 自增自减运算符重载

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

    /***
    addMyself.cpp
    ***/
    #include<iostream>
    using namespace std;
    
    class Time
    {
        private:
            int hours;
            int minutes;
        public:
            Time()
            {
                hours = 0;
                minutes = 0;
            }
            Time(int h,int m)
            {
                hours = h;
                minutes = m;
            }
    
            void displayTime()
            {
                cout << "H: " << hours << " M" << minutes << endl;
            }
            //重载前缀递增运算符
            Time operator++()
            {
                ++minutes;
                if(minutes >= 60)
                {       
                    ++hours;
                    minutes -= 60;
                }
                return Time(hours,minutes);
            }
            //重载后缀递增运算符
            Time operator++(int)
            {
                Time T(hours,minutes);
                ++minutes;
                if(minutes >= 60)
                {
                    ++hours;
                    minutes -= 60;
                }
                return T;
            }
    };
    
    int main()
    {
        Time T1(11,59),T2(10,40);
    
        ++T1;
        T1.displayTime();
        ++T1;
        T1.displayTime();
    
        T2++;
        T2.displayTime();
        T2++;
        T2.displayTime();
        return 0;
    }

    运行结果:

    exbot@ubuntu:~/wangqinghe/C++/20190808$ g++ addMyself.cpp -o addMyself

    exbot@ubuntu:~/wangqinghe/C++/20190808$ ./addMyself

    H: 12 M0

    H: 12 M1

    H: 10 M41

    H: 10 M42

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

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

    /***
    addOver.cpp
    ***/
    #include<iostream>
    using namespace std;
    
    class Check
    {
        private:
            int i;
        public:
            Check():i(0){};
            Check operator++ ()
            {
                Check temp;
                temp.i = ++i;
                return temp;
            }
    
            Check operator ++ (int)
            {
                Check temp;
                temp.i = i++;
                return temp;
            }
    
            void Display()
            {
                cout << "i = " << i << endl;
            }
    };
    
    int main()
    {
        Check obj1,obj;
        obj.Display();
        obj1.Display();
    
        obj1 = ++ obj;
        obj.Display();
        obj1.Display();
    
        obj1 = obj++;
        obj.Display();
        obj1.Display();
        
        return 0;
    }

    运行结果:

    exbot@ubuntu:~/wangqinghe/C++/20190808$ ./addOver

    i = 0

    i = 0

    i = 1

    i = 1

    i = 2

    i = 1

    递减和递增运算符重载:

    1. 递增和递减一般是对改变对象的状态,所以一般是重载为成员函数。
    2. 重载递增递减,一定要和指针的递增递减区分。因为这里重载操作的是对象,而不是指针(由于指针是内置类型,指针的递减递增是无法重载的),所以一般情况的递增递减是操作对象内部的成员变量。
    3. 递增和递减分为前置和后置情况,a = ++b;(前置), a = b++。因为符号一样,所以给后置版本加一个int形参作为区分。这个形参是0,但是在函数体中用不到,只是为了区分前置后置而已。
  • 相关阅读:
    函数--第一类对象、闭包、
    递归
    局部变量 和 全局变量
    默认参数,不固定参数 *args,**kwargs
    函数基本语法及特性
    文件修改
    文件操作,重点,日常使用!!!
    集合
    重新写了一边三级菜单,加了一些自己的理解
    三级菜单
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11326019.html
Copyright © 2011-2022 走看看