重載運算符
這篇隨筆我來講解一下C++語言中重載運算符的相關知識。
一、重載運算符的用途
這是一個比較哲學的問題:我們為什么要重載運算符?
理由就是,我們C++語言中已經給出的運算符(包括算數運算符和邏輯運算符)只是針對C++語言中已經給定的數據類型進行運算,假如我們想要對我們的自定義數據類型進行運算的話,則需要重載運算符,我們可以把重載運算符理解成對已有的運算符的一種重新定義。
比如:
double a,b,c;
a=1/3;
b=1/2;
c=a+b;
printf("%lf",c);
這段程序輸出的肯定不是兩個分數相加的結果。
這時候我們就可以重載運算符+。
二、重載運算符的實現
語法格式如下(非常重要)
<返回類型> operator <運算符符號>(<參數>)
{
<定義>;
}
這里我們舉一個例子。
在優先隊列(priority_queue)中,存儲的元素較大的會被放到堆頂。如果存的是int或者string等類型還好辦(因為他們本身就可以互相比較大小),如果是我們自定義的結構體類型,那就需要重載<運算符。
比如:
struct node
{
int id;
double x,y;
}//定義結構體
bool operator <(const node &a,const node &b)
{
return a.x<b.x && a.y<b.y;
}//重載運算符“<”
注:這里的結構體保存了一個整型變量id,兩個長浮點變量x,y,表示坐標。
這里的重載運算符先比橫坐標后比縱坐標。
三、重載運算符的注意事項。
以下運算符不可重載:
關系運算符"."
成員指針運算符".*"
作用域運算符"::"
sizeof運算符
三目運算符"?:"
重載運算符限制在C++語言中已有的運算符范圍內的允許重載的運算符之中,不能創建新的運算符。
運算符重載實質上是函數重載。
好了,關於重載運算符的基本知識基本已經被科普完了,這是C++語言程序設計中非常非常常見的一種操作手段。請大家務必重視並用大量例題熟練掌握。