一、運算符重載的概念
在C語言中,運算符只能用於基本數據類型,例如,可以用==判斷兩個整數是否相等,但不能用於判斷字符串是否相等,不能用於判斷結構體,也不能用於判斷類。
在C++中,運算符的重載就是把運算符的符號賦予新的含義,如果類重載了 == 運算符,那麼就可以用== 判斷兩個類是否相等。
二、運算符重載的實現
operator是C++的一個關鍵字,它和運算符一起使用,表示一個運算符重載函數,在理解時可將operator和運算符(如operator==)視爲類的一個成員函數名。
示例(book214.cpp)
/*
* 程序名:book214.cpp,此程序用於演示C++運算符重載。
* 作者:C語言技術網(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>
#include <string.h>
class CGirl // 定義類
{
public:
char m_name[50]; // 姓名
char m_sc[30]; // 身材,火辣;普通;飛機場。
bool operator==(const CGirl &Girl) // 重載==運算符
};
int main()
{
CGirl Girl1,Girl2;
strcpy(Girl1.m_name,"西施");
strcpy(Girl2.m_name,"東施");
if (Girl1 == Girl2) printf("Girl1和Girl2是同一個人。\n");
else printf("Girl1和Girl2不是同一個人。\n");
}
bool CGirl::operator==(const CGirl &Girl) // 重載==運算符
{
// 如果兩個類的姓名相同,就相等
if (strcmp(m_name,Girl.m_name)== 0) return true;
return false;
}
CGirl類重載了==運算符,定義了operator==函數,用於判斷兩個對象是否相等,實際上是判斷兩個對象的成員變量m_name是否相同,如果相同,對象就相等。
運行效果
通過上述結果能夠知道,因爲操作符重載函數operator==是CGirl類的一個成員函數,所以對象Girl1、Girl2都可以調用該函數。其中的 if (Gril1 ==Gril2) 語句,相當於對象Gril1調用函數operator==,把對象Girl2作爲一個參數傳遞給該函數,從而實現了兩個對象的比較。
我們把語句改爲if (Gril1 != Gril2) ,會如何?編譯如下:
編譯無法通過,因爲CGirl類並沒有重載!=運算符。
三、個人經驗
下一章節中將學習C++的string類,它重載了+、=、==、!=等運算符,對程序員來說,確實感覺有些方便。
在實際開發中,重載運算符有可能會模糊程序員的意圖,如果要判斷Girl1和Girl2的m_name成員是否相等,我更願意用strcmp函數。
很久很久以前,學習了運算符重載的時候,可以把各種運算符重載成奇奇怪怪的功能,覺得很好玩,後來就不玩了,感覺沒什麼意思。
運算符重載還有很多其它的知識,我就不介紹了。
四、課後作業
對CGirl重載!=操作符試試。
五、版權聲明
C語言技術網原創文章,轉載請說明文章的來源、作者和原文的鏈接。
來源:C語言技術網(www.freecplus.net)
作者:碼農有道
如果文章有錯別字,或者內容有錯誤,或其他的建議和意見,請您留言指正,非常感謝!!!