《運算子覆載》PPT课件

《運算子覆載》PPT课件

ID:39163343

大小:346.50 KB

页数:81页

时间:2019-06-26

《運算子覆載》PPT课件_第1页
《運算子覆載》PPT课件_第2页
《運算子覆載》PPT课件_第3页
《運算子覆載》PPT课件_第4页
《運算子覆載》PPT课件_第5页
资源描述:

《《運算子覆載》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第十四章運算子覆載1第十四章運算子覆載在C++語言中,程式設計師除了可以對函式(包含成員函式)進行覆載之外,也可以對運算符號進行覆載,以擴充運算符號的功能,此稱為「運算子覆載」(OperatorOverloading)。當然由於運算子分為單元運算子、二元運算子、前置運算子、後置運算子,因此運算子的覆載也比函式覆載稍微複雜一些,因此我們將運算子覆載獨立出來在本章作詳細的介紹。2大綱14.1運算子覆載的需求14.2運算子覆載14.3單元運算子的覆載14.4二元運算子的覆載14.5單元運算與二元運算同

2、時存在的覆載14.6轉型運算子的覆載14.6.1物件轉基本資料型態14.6.2不同類別型態間的轉換14.7「=」與「==」運算子覆載14.7.1「=」運算子覆載14.7.2「==」運算子覆載14.8「<<」與「>>」運算子覆載14.8.1「<<」運算子覆載14.8.2「>>」運算子覆載14.9本章回顧3在前面的章節中,我們使用運算子進行運算時,使用的都是運算子內定的功能,例如基本的四則運算子:加「+」、減「-」、乘「*」、除「/」,比較運算子的比較運算:大於「>」、等於「==」、小於「<」…等等

3、。舉例來說,如果要進行兩個整數a,b的相加,則只要透過加號運算子「+」即可完成,也就是a+b,之所以能夠如此做,是因為C/C++編譯器已經內建了「+」運算子的數學加法功能。事實上,「+」運算子原本就已經具有內定的覆載功能,因為它不但能進行整數的相加,還能進行浮點數的相加,甚至它還能夠自行依照資料型態作自動轉型的動作。雖然「+」運算子的功能已經非常強大,但它仍無法對我們所定義的結構體及類別(物件)進行運算,這是因為編譯器並不了解應該如何對這些由程式設計師所定義的資料型態作運算才是適當的。例如變數a

4、與變數b為複雜的矩陣Matrix類別所產生的物件,編譯器對於a+b就不知道該如何解決。14.1運算子覆載的需求414.1運算子覆載的需求為了使程式設計更方便,C++允許某些運算子被另行定義一些新功能,以便處理由程式設計師所定義的資料型態,這就是運算子覆載的主要目的。【註】:在上述範例中,當然我們也可以於Matrix類別中定義一個MatrixSum(MatrixVar)成員函式,並透過c=a.Sum(b);完成矩陣的相加,但這卻不如c=a+b;來得方便與直觀,因此運算子覆載仍有其必要性及方便性。圖

5、14-1運算子覆載的必要性514.2運算子覆載我們已經了解運算子覆載的用途後,本節將介紹如何實作運算子覆載。事實上,運算子覆載的實作方法與定義類別中的成員函式覆載相似,也就是在類別內宣告覆載運算子,以及在類別內或類別外具體定義覆載運算子的新運算行為。覆載運算子需要先在類別內宣告,其宣告語法如下:語法說明:(1)語法中的『#』代表的是運算子符號,例如「+」、「-」、「>>」、「--」等等。(2)運算子的運算可以區分為不需要回傳值及需要回傳值。若不需要回傳值,則回傳資料型態應宣告為void。回傳資料

6、型態operator#(傳入引數);614.2運算子覆載(3)傳入引數與函式的傳入引數類似,但有些不同。運算子的運算對象可以區分為單元運算(例如傳統的a++;)及二元運算(例如傳統的a+b;)。如果是二元運算則後面的運算元(第二個運算元)需設定為引數(前面的運算元不必設定為引數,因為這是在類別內定義,因此該類別的物件將自動隱含成為第一個運算元)。如果是單元運算,則又可以分為兩種狀況,如下所述。(4)單元運算分為兩種狀況,一種是前置運算子(例如傳統的++a;),一種是後置運算子(例如傳統的a++;

7、)。宣告前置運算子覆載時不需要指定引數,宣告後置運算子覆載時則需要設定引數為int。(5)運算子的覆載還有一些限制如下:7限制一:覆載運算子需符合C++語法。限制二:程式設計師無法新創運算子符號,只能針對C++原有的運算符號進行覆載,同時有些運算子是無法被覆載的,整理如下:14.2運算子覆載可覆載的運算子+-*/%^&

8、

9、

10、~!=<><=>=++--<<>>==!=&&<<=+=-+/=%=^=&=

11、=>>=[]()->->*newdelete表14-1可進行覆載的運算子814.2運算子覆載限制

12、三:在可被覆載的運算子中,有些運算子只能被定義為單元運算子,如下表:限制四:在可被覆載的運算子中,有些運算子可以被定義為單元運算子或二元運算子,如下表:無法覆載的運算子..*?:::sizeof表14-2不可進行覆載的運算子只能被定義為單元運算子--++!~表14-3只能被定義為單元運算子可被定義為單元運算子或二元運算子+-&*表14-4可被定義為單元運算子或二元運算子914.2運算子覆載限制五:無法重新定義運算元的個數(如限制四與限制三的規定)。限制六:無法重新定義運算子優先權。限制七:無法覆

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。