1. 程式人生 > >過載運算子以及友元函式

過載運算子以及友元函式

在自己已經創造好的類中如果想更加簡化一些運算,比如之前兩個類中的物件如果想要相加必須通過類成員函式來實現,現在假設之前建立好的time類中的兩個物件

time a;

time b;

timec;

c=a+b;

如果想實現上述運算,就要求過載運算子:利用關鍵字operator來實現。

首先在標頭檔案中就要宣告過載運算子函式

Time operator +(const Time & t)const;

在定義方法的函式中過載+運算子:

Time Time::operator+(const Time & t)const
{
    Time sum;
    sum.minutes=minutes+t.minutes;
    sum.hours=hours+t.hours+sum.minutes/60;
    sum.minutes=sum.minutes%60;
    return sum;
}

這樣就可以將兩個定義的類直接進行加法運算。

除此之外,當我們重新定義乘法運算時,如下面的函式:

Time Time::operator *(double mult)const
{
    Time result;
    long a=(hours*60+minutes)*mult;
    result.minutes=a%60;
    result.hours=a/60;
    return result;
}

假如為:a=b*num,其中a,b為類物件,num為實數,可以進行乘法運算,但如果是這樣:

a=num*b;

顯然不能進行運算了,這樣就要求在定義一個過載,必須為友元函式,則需要關鍵字friend如下:

在標頭檔案中定義:

friend Time operator*(double m,const Time & t)

{

          return t*m;   

}

這樣就滿足了之前的那種運算,當然友元函式最重要的在於對<<運算子的定義,請見c++ primer 415頁。