1 / 22

C/C++ 基礎程式設計班 C++: 運算 子重 載

C/C++ 基礎程式設計班 C++: 運算 子重 載. 講師:鄒尚軒 , 8/16, 2013. 課程大綱. 重載運算 子 遞 迴. 重載運算子 (operator overloading). 在 C++ 裡 ,除了 預設的資料型態能使用運算子 外,如: int 、 double 、 char 等, 物件要使用運算子,預設上是不行的 但在許多情況 下你希望用到這些運算子,例如將 string 串接起來,或是你自己寫的物件進行相加 但為了方便以及運算 , C++ 提供 重載運算子的功能. 重載運算子.

walda
Download Presentation

C/C++ 基礎程式設計班 C++: 運算 子重 載

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C/C++基礎程式設計班C++: 運算子重載 講師:鄒尚軒, 8/16, 2013

  2. 課程大綱 • 重載運算子 • 遞迴

  3. 重載運算子(operator overloading) • 在C++裡,除了預設的資料型態能使用運算子外,如:int、double、char等,物件要使用運算子,預設上是不行的 • 但在許多情況下你希望用到這些運算子,例如將string串接起來,或是你自己寫的物件進行相加 • 但為了方便以及運算,C++提供重載運算子的功能

  4. 重載運算子 • 重載運算子如重載函式,在類別宣告內,定義你希望的運算子如何運作,並且實作他的行為 • 重載運算子後,同屬該類別的物件之間就可以進行運算,如相加或是相減 • 而重載運算子也可能導致誤會,例如有人將重載的+運算子實作為減法運算,因此使用上要注意

  5. 如何重載運算子 • 重載運算子的方法類似實作成員函式 • 其中#為要重載的運算子,例如要重載+,就將#換成+,以下是C++能重載的運算子:

  6. 範例 • 複習切割檔案 • 標頭檔:放置類別宣告的地方,名字常為"類別.h",通常只放置宣告 • 程式碼:實際上實作類別的地方,名字常為"類別.cpp",需要 #include "類別.h" • 範例為一個二維座標點,有 x, y 兩個值 • 因為我們不希望宣告後資料被改動,因此不需要set函式

  7. 範例:Point2D.h • Point2D.h 中只有宣告

  8. 範例:Point2D.cpp • Point2D.cpp才是真正的實作

  9. 範例:main.cpp • main.cpp使用Point2D類別範例

  10. 練習 • 承上面範例,重載*運算子,讓Point2D物件間能夠進行乘法運算 • 假設:(x1, y1)*(x2, y2)=(x1*x2, y1*y2)

  11. 可是... • cout << "p3(x, y) = (" << p3.getX() << ", " << p3.getY() << ")" << endl; • 這好長怎麼辦? • 我們想cout << "p3(x, y) = " << p3 << endl; • overloading operator <<

  12. 重載<<:Point2D.h • ostream是C++負責輸出的類別,而friend是指說跟他是好朋友,這樣他才能用Point2D裡私有的東西

  13. 重載<<:Point2D.cpp

  14. 重載<<:main.cpp • main.cpp使用Point2D類別範例

  15. 重載>> • 可以重載<<,當然也可以重載>> • 重載>>的方法與<<一樣,使用的是istream • 若是重載>>,則Point2D物件可透過cin等istream改變XY的值

  16. 課程大綱 • 重載運算子 • 遞迴

  17. 遞迴 • 遞迴:函式呼叫自己本身,且不停的持續下去,直到某個終止條件才停止呼叫 • 範例:

  18. 遞迴的過程 fac(5) = 120 fac(5): return 5 * fac(4) 24 fac(4): return 4 * fac(3) 6 fac(3): return 3 * fac(2) 2 fac(2): return 2 * fac(1) 1 fac(1): return 1 * fac(0) 1 fac(0): return 1

  19. 練習 • 使用遞迴實作輾轉相除法,求出兩數最大公因數 • 輾轉相除法過程:兩數 a, b • 先拿 a 除 b,得一餘數 c(=a%b) • 拿c 除 a,得一餘數 d • 拿 d 除 c,得一餘數 e • … • 直到某除數可以整除某被除數,則該除數就是(a, b)最大公因數

  20. 練習解答

  21. 上次排列的提示 • 輸入長為 n 的字串,從第一個字開始排起,每次都試試看有哪些字可以排,排好一個字之後先換排下一個字,直到排完 n 個 • 排完 n 個後,就印出排列結果,並且回傳,所以第 n-1 格又可以在試試看有哪些可以排 • 一直循環下去…

  22. 本期課程到此結束 謝謝各位十天來的合作與不嫌棄以及給我的回饋,希望大家有問題多多發問!

More Related