35_重載自增運算符

1、可重載的運算符

2、重載自增 或自減 ++ --運算符

operator++

編譯器看到++a(前置++),它就調用operator++(a),當編譯器看到a++(後置++),它就會去調用operator++(a,int).

#include <iostream>

using namespace std;
class Data
{
    friend ostream& operator<<(ostream &out, Data &ob);
private:
    int a;
    int b;
public:
    Data()
    {
        cout<<"無參的構造函數"<<endl;
        a = 0;
        b=0;
    }
    Data(int a,int b):a(a),b(b)
    {
        cout<<"有參構造"<<endl;
        //this->a = a;
        //this->b = b;
    }
    void showData(void)
    {
        cout<<"a = "<<a<<", b= "<<b<<endl;
    }
    ~Data()
    {
        cout<<"析構函數函數"<<endl;
    }

    //成員函數 重載前置++  ++ob1  (先加  後使用)
    //編譯器 默認識別 operator++(a) //但是a可以用this代替 從而化簡 operator++()
    Data& operator++()//++ob1
    {
        //先加
        a++;//this->a = this->a +1
        b++;//this->b = this->b +1
        //後使用
        return *this;
    }
    //成員函數 重載後置++  ob1++  (先使用 後加)
    //編譯器 默認識別 operator++(a,int) //但是a可以用this代替 從而化簡 operator++(int)
    Data& operator++(int)//ob1++
    {
        //先使用(備份加之前的值)
        static Data old=*this;

        //後加
        a++;
        b++;

        //返回備份值
        return old;
    }

    //重載前置--    --ob3
    //編譯器 默認識別 operator++(a) //但是a可以用this代替 從而化簡 operator--()
    Data& operator--()
    {
        //先減
        a--;
        b--;

        //後使用(返回)
        return *this;
    }

    //重載後--    ob4--
    //編譯器 默認識別 operator++(a,int) //但是a可以用this代替 從而化簡 operator++(int)
    Data& operator--(int)
    {
        //先使用
        static Data old=*this;

        //再減
        a--;
        b--;

        return old;
    }


};
//普通全局函數 作爲類的友元 重載<<運算符
ostream& operator<<(ostream &out, Data &ob)
{
    out<<"a = "<<ob.a<<", b = "<<ob.b;
    return out;
}
void test01()
{
    Data ob1(10,20);
    ob1.showData();

    //重載<<直接輸出自定義對象的值
    //operator<<(cout,ob1);
    cout<<ob1<<endl;

    //成員函數 重載 ++運算符
    cout<<++ob1<<endl;

    Data ob2(10,20);
    cout<<ob2++<<endl;
    cout<<ob2<<endl;

    //成員函數 重載 --運算符
    Data ob3(10,20);
    cout<<"ob3 "<<ob3<<endl;
    cout<<--ob3<<endl;

    Data ob4(10,20);
    cout<<"ob4 "<<ob4<<endl;
    cout<<ob4--<<endl;
    cout<<"ob4 "<<ob4<<endl;


}
int main(int argc, char *argv[])
{
    test01();
    return 0;
}

運行結果:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章