天天看點

【C++】成員函數重載二進制和一進制運算符

重載雙目運算符時,運算符函數中應該具有兩個參數,若運算符函數作為類的成員函數(當運算符重載函數作為類的成員函數時,要求操作數左邊必須是一個對象,而函數的參數可以是同類的對象也可以是普通的變量),則隻需要一個參數。

雙目運算符

雙目運算符就是具有兩個操作數的運算符。如 +、-、==等。

對雙目運算符而言,成員函數重載運算符的函數參數表中隻有一個參數,而用友元函數重載運算符函數參數表中含有兩個參數。

成員函數重載 == 、>運算符:

bool operator==(CTime& time);
    bool operator>(CTime& time);      
//判斷對象的每個成員變量是否相等
bool CTime::operator==(CTime& time)
{
    if (m_nHour == time.m_nHour&&m_nMinute == time.m_nMinute&&m_nSecond == time.m_nSecond)
    {
        return true;
    }
    return false;
}

bool CTime::operator>(CTime& time)
{
    if (m_nHour > time.m_nHour) //先判斷兩個對象的小時數的大小
    {
        return true;
    }
    else if (m_nHour < time.m_nHour)
    {
        return false;
    }
    else //這是兩個對象小時數相等的情況,接下來就判斷分鐘數
    {
        if (m_nMinute> time.m_nMinute) //再判斷兩個對象的分鐘數的大小
        {
            return true;
        }
        else if (m_nMinute < time.m_nMinute)
        {
            return false;
        }
        else //這是兩個對象的時鐘和分鐘相等的情況下
        {
            if (m_nSecond>time.m_nSecond) //最後比較秒鐘
            {
                return true;
            }
            else
            {
                return false;
            }
        }

    }

    return false;  //最後就是兩個對象相等,也不滿足一個對象大于另外一個對象的情況,傳回false
}      

成員函數重載++運算符

CTime operator++();//前置的++
    CTime operator++(int);//後置++,這個int類型的參數隻是為了區分,我們并不會使用這個參數,是以我們不需要形參的名字      
//前置的++
CTime CTime::operator++() //重載++(前置)運算符
{
    CTime time(0,0,1); //定義了一個秒數為1的對象
    *this = *this + time;//由于前面的函數已經重載了加号運算符,裡面已經定義好了相關的操作,是以這句代碼調用了加号運算符的重載函數,并将對象的秒數加一
    return *this; //前置++的操作順序就是先加再傳回它的值
}

CTime CTime::operator++(int) //重載++(後置)運算符
{
    CTime time = *this;//後置++的操作規則是先傳回再加,是以需要建立一個臨時變量儲存好這個對象的值
    CTime time2(0, 0, 1);//定義了一個秒數為1的對象
    *this = *this + time2;//同上調用了加法運算符的重載函數
    return *this;//傳回加法操作之前的對象的值
}      
CTime time(10, 50, 20);

    ++time;
    std::cout << time.getHour() << ":" << time.getMinute() << ":" << time.getSecond() << endl;

    time++;
    std::cout << time.getHour() << ":" << time.getMinute() << ":" << time.getSecond() << endl;      

結果

源代碼下載下傳位址:

GITHUB源碼下載下傳位址:

本文章由​​[谙憶]​​編寫, 所有權利保留。

繼續閱讀