C++運算符重載

一、運算符重載的概念

在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)
作者:碼農有道

如果文章有錯別字,或者內容有錯誤,或其他的建議和意見,請您留言指正,非常感謝!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章