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,但是在函数体中用不到,只是为了区分前置后置而已。
  • 相关阅读:
    Gson简要使用笔记
    (一)微信开发环境搭建
    Hibernate 注解 字段不映射的注解
    Hibernate 使用注解后没发现建表
    Hibernate 注意命名与数据库关键字的冲突 处理方法
    struts2不能通过ONGL方式取出request中的Atrribute
    Android 两个Activity进行数据传送 发送
    Android 设置隐式意图
    Android 隐式意图 让用户选择一个浏览器访问网址
    Android 判断是否联网 是否打开上网
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11326019.html
Copyright © 2011-2022 走看看