過載運算子以及友元函式
在自己已經創造好的類中如果想更加簡化一些運算,比如之前兩個類中的物件如果想要相加必須通過類成員函式來實現,現在假設之前建立好的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頁。