• 重载operator++


    参考:www.cnblogs.com/ggggg63/p/6693008.html

    (作为成员函数的)前置“++”不接受任何参数,而后置“++”接受一个int类型的参数,尽管没什么实际用途,但是却为编译器确定重载对象提供了帮助。

    还有一点,则是需要特殊小心地处理返回值问题。前置++通常情况应该返回对象的引用,而后置式的++应该返回一个const修饰的对象实体。

    1. 一般重载为成员函数
    //prefix ++ : increment and fetch
    myclass & myclass::operator++()
    {
        *this += 1;
        return *this;
    }
    //postfix ++ : fetch and increment
    const myclass myclass::operator++(int)
    {
        myclass tmp = *this;
        ++(*this);
        return tmp;
    }
    
    2. 也可重载为非成员函数(很少这么做)
    friend myclass& operator(myclass& a); // 前++
    friend myclass  operator(myclass& a, int); //后++
    

      

      例子:

    class point
    {
    public:
        point(int val)
        {
            x=val;
        }
        //(作为成员函数的)前置“++”不接受任何参数,而后置“++”接受一个int类型的参数,
        //尽管没什么实际用途,但是却为编译器确定重载对象提供了帮助。
        point& operator++() //前++
        {
            x++;// this->x += 1;
            return *this;
        }
        const point operator++(int) //后++
        {
            point old=*this;
            ++(*this);
            return old;
        }
        int GetX() const
        {
            return x;
        }
    private:
        int x;
    };
    int main()
    {
        point a(10);
        cout<<(++a).GetX();
        cout<<a++.GetX();
        return(0);
    }
    // 结果: 1111
    

      

    常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。

    昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。
  • 相关阅读:
    JavaScript中的事件循环
    CSS布局
    Tomcat相关
    C#参数中ref和out的区别
    angular启动4200端口后,如何停止监听4200端口
    表联接(交叉连接,内联,外联)
    如何使用vs自带的反编译工具Lldasm
    软件架构需要注意的几点,待补充。。。
    SqlServer中With(NOLOCK)
    TypeScript preview
  • 原文地址:https://www.cnblogs.com/htj10/p/10186047.html
Copyright © 2020-2023  润新知