C++運算符重載

1、運算符重載的概念

在C語言中,運算符只能用於基本數據類型,例如,能夠用==判斷兩個整數是否相等,但不能用於判斷字符串是否相等,不能用於判斷結構體,也不能用於判斷類。程序員

在C++中,運算符的重載就是把運算符的符號賦予新的含義,若是類重載了 \== 運算符,那麼就能夠用\== 判斷兩個類是否相等。ide

2、運算符重載的實現

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是否相同,若是相同,對象就相等。.net

運行效果code

在這裏插入圖片描述

經過上述結果可以知道,由於操做符重載函數operator\==是CGirl類的一個成員函數,因此對象Girl一、Girl2均可以調用該函數。其中的 if (Gril1 \==Gril2) 語句,至關於對象Gril1調用函數operator\==,把對象Girl2做爲一個參數傳遞給該函數,從而實現了兩個對象的比較。對象

咱們把語句改成if (Gril1 != Gril2) ,會如何?編譯以下:blog

在這裏插入圖片描述

編譯沒法經過,由於CGirl類並無重載!=運算符。圖片

3、我的經驗

下一章節中將學習C++的string類,它重載了+、=、==、!=等運算符,對程序員來講,確實感受有些方便。開發

在實際開發中,重載運算符有可能會模糊程序員的意圖,若是要判斷Girl1和Girl2的m_name成員是否相等,我更願意用strcmp函數。

好久好久之前,學習了運算符重載的時候,能夠把各類運算符重載成奇奇怪怪的功能,以爲很好玩,後來就不玩了,感受沒什麼意思。

運算符重載還有不少其它的知識,我就不介紹了。

4、課後做業

對CGirl重載!=操做符試試。

5、版權聲明

C語言技術網原創文章,轉載請說明文章的來源、做者和原文的連接。
來源:C語言技術網(www.freecplus.net)
做者:碼農有道

若是這篇文章對您有幫助,請點贊支持,或在您的博客中轉發個人文章,謝謝!!!若是文章有錯別字,或者內容有錯誤,或其餘的建議和意見,請您留言指正,很是感謝!!!

相關文章
相關標籤/搜索