1 / 42

C/C++ 基礎程式設計班 C++: C++ 基本介紹與 C 之比較

C/C++ 基礎程式設計班 C++: C++ 基本介紹與 C 之比較. 講師:鄒尚軒 , 13/ 8 , 2013. 課程大綱. C 與 C++ C++ 基本使用 輸入與輸出 動態記憶體配置 字串 參照 重載函式. C 與 C++. C++ 是 C 改進而得到的語言,其有幾個特色: 相容於 C C 語言中的所有函式、語法都在 C++ 一樣可以使用 較高階的程式語法 利於程式設計師開發程式,減少錯誤發生,並增加開發速度 物件導向的引入 讓程式設計師能夠使用物件觀念設計程式,並且利用軟體設計語言或模式進行軟體架構的設計. C++ 增添了許多東西.

louise
Download Presentation

C/C++ 基礎程式設計班 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++: C++ 基本介紹與C之比較 講師:鄒尚軒, 13/8, 2013

  2. 課程大綱 • C與C++ • C++基本使用 • 輸入與輸出 • 動態記憶體配置 • 字串 • 參照 • 重載函式

  3. C與C++ • C++是C改進而得到的語言,其有幾個特色: • 相容於C • C語言中的所有函式、語法都在C++一樣可以使用 • 較高階的程式語法 • 利於程式設計師開發程式,減少錯誤發生,並增加開發速度 • 物件導向的引入 • 讓程式設計師能夠使用物件觀念設計程式,並且利用軟體設計語言或模式進行軟體架構的設計

  4. C++增添了許多東西 • 類別(class) • 讓程式設計師能夠使用物件設計程式 • 重載(overloading) • 可以讓函式有多種引數型態 • 參照(reference) • 改進指標的不易用性與安全性 • 字串(string) • 使得字串處理更為簡易 • 其他……

  5. 既然加了那麼多東西… • 速度比較慢 • 執行檔比較大

  6. 課程大綱 • C與C++ • C++基本使用 • 輸入與輸出 • 動態記憶體配置 • 字串 • 參照 • 重載函式

  7. Hello world. • 學習C++的第一個程式 • 請同學使用Dev. C++編譯C/C++的Hello World,並比較兩者執行檔大小

  8. C++的變數宣告 • 與C語言宣告方式一樣 • 只要在使用前宣告即可→馬上宣告馬上用 • 下面範例在標準C語言中是錯誤的,無法通過編譯,而在C++是合法的

  9. 課程大綱 • C與C++ • C++基本使用 • 輸入與輸出 • 動態記憶體配置 • 字串 • 參照 • 重載函式

  10. C++輸入與輸出 • cout物件:負責輸出,如:printf • <<:將東西傳給cout印出 • cin物件:負責輸入,如:scanf • >>:將輸入的東西存入變數、陣列等 • 同%,有幾個東西要輸入輸出,就有幾個<<

  11. C++輸入與輸出 • cin、cout不用像printf、scanf需要設定變數型態

  12. 為什麼不用管? • 因為C++使用物件導向設計,cin/cout是C++中負責輸入輸出的主要的物件,而物件很聰明,他會幫你做很多事,所以用起來很容易 • cin/cout中還有許多其他的功能,使用方法類似使用結構成員的方式(使用.) • 天下沒有白吃的午餐… • 物件構成很複雜,因此速度比較慢、設計起來比較難

  13. 含有空白的字串 • 使用cin抓字串時,與scanf一樣,抓到空白就停止 • 解決:cin.getline(字元陣列名稱, 字元陣列長度) • 輸入字串放至字元陣列中 • 若輸入字串長度>字元陣列長度,自動捨去超過的部分

  14. 含有空白的字串 • cin與getline和C語言中的scanf與gets一樣,會有問題發生 • 解決:使用cin.ignore()忽略掉一個字元('\n')

  15. 課程大綱 • C與C++ • C++基本使用 • 輸入與輸出 • 動態記憶體配置 • 字串 • 參照 • 重載函式

  16. C++動態記憶體配置 • 動態記憶體配置:new • 配置一個資料空間,並傳回空間位置 • 語法:指標 =new 資料型態; • 配置一串資料空間,並傳回空間開始位置 • 語法:指標 =new 資料型態[個數]; • 釋放記憶體:delete • 釋放一個空間 • 語法:delete指標; • 釋放一串空間 • 語法:delete[] 指標;

  17. 與C動態配置之比較 • malloc(sizeof(資料型態))<=>new 資料型態 • malloc(sizeof(資料型態)*n)<=>new資料型態[個數] • free(指標)<=>delete 指標 • free(指標)<=>delete[] 指標 (若指標指的是動態陣列)

  18. 範例

  19. 課程大綱 • C與C++ • C++基本使用 • 輸入與輸出 • 動態記憶體配置 • 字串 • 參照 • 重載函式

  20. C++字串:string • C++提供了比C更為方便的字串處理功能 • #include<string>//非<string.h> • 宣告語法 • string 字串物件名稱; • 字串物件可以用以下的方式操作: • =:複製字串 • ==:比較字串 • +=:字串串接 • length():計算字串長度 • c_str():傳回C的字串(char*)

  21. C++字串:string • 範例:輸入字串後印出長度與所有字元

  22. C++字串:string • 範例:常用運算 • =:複製字串 • ==:比較字串 • +=:字串串接

  23. C++字串:string • C++字串與C字串不同,C字串是由字元陣列所構成的,而C++字串長度會由字串本身自己控制 • C++字串是物件,而C字串是資料型態所構成的陣列,兩者不一樣(string vs. char *) • 可透過c_str()這個成員函式將C++字串轉成const char *(C字串,並且無法對此作修改) • const是一個關鍵字,代表該東西無法進行修改例如:constint a = 10; 這樣 a 就不能被賦予新的值

  24. C++字串:string • 範例:字元陣列和字串的轉換 字元陣列 →string string →字元陣列

  25. 課程大綱 • C與C++ • C++基本使用 • 輸入與輸出 • 動態記憶體配置 • 字串 • 參照 • 重載函式

  26. C++的參照(reference) • 參照(reference)類似將一個變數或是物件取一個別名,也就是雖然是不同名字,但是是相同東西 • 參照型態的變數或是物件,即是該變數或是物件本身,因此可用參照直接操作變數或物件 • 參照功能類似指標,但是不需要使用指標的語法(&與*) • 宣告參照的語法:資料型態 &資料名稱 = 參照的對象; • int a = 10; //宣告整數變數a • int*b = &a; //宣告整數指標b,並指向a • int&c = a; //宣告整數參照c,且c是a的參照(c即是a)

  27. 參照需初始化 • 參照必須在一開始就給他初始值 • 想像你要幫小孩取綽號,可是卻沒有小孩 • 這不是很奇怪嗎? • 綽號取好之後就不能變,初始化好就不能另外設定

  28. 參照和指標 • 參照和指標都可以直接透過記憶體位置操作資料

  29. 參照用於傳遞引數 • 參照時常用於引數的傳遞,比起指標來的較方便(不需要*與&) • 限制是要傳遞動態分配的記憶體位置時,仍然得用指標

  30. 參照和指標的差異 • 對於參照來說:a就是x,兩者是一樣的東西(記憶體中同一個格子) • 對於指標來說:a是一個指向x的指標,所以真的有在記憶體中佔一個格子(裝x的記憶體位址) • 結論:參照沒有佔額外的記憶體,指標有。

  31. 參照的好處 • 不用&* • 相對的有可能忘記他是參照,不小心修改到原本資料 • 不像指標還需要另一塊記憶體空間儲存記憶體位址 • 不需要房卡,直接破門而入 • 直接存取該記憶體位址,速度很快 • 不需要先看房卡上的房號,因為自己就是房間主人

  32. 參照的危險 • 因為利用參照呼叫函式時不需要&,因此可能造成錯誤 • 解決方法:撰寫函式時宣告寫清楚!使用他人函式時讀清楚宣告! void func(&a)? OR void func(a)? int a; func(a)

  33. 練習 • 使用參照寫一個swap函式,將兩個變數進行交換 • 如: • int a = 1, b = 2;swap(a, b); //做完之後a=2,b=1 • 如果有同學發現沒有寫卻能用… • 那是因為你用到內建的 swap 了

  34. 練習解答

  35. 課程大綱 • C與C++ • C++基本使用 • 輸入與輸出 • 動態記憶體配置 • 字串 • 參照 • 重載函式

  36. 重載函式(function overloading) • 在C裡面,函式名稱都是獨一無二的,一份程式碼裡只有一個唯一的函式,不能有人跟它同名 • C++支援函式的重載(overloading),根據傳入函式的參數不同的數量或是型態,自動呼叫相對應的函式 • 同名的函數可以有多個!

  37. 重載函式(function overloading) • 根據不同參數數量,呼叫相對應的函式

  38. 重載函式(function overloading) • 根據參數不同型態,選擇要呼叫的函式

  39. 重載函式與回傳值 • 重載函式不會以回傳值做區分

  40. 練習 • 延續33頁範例,加入一個函式show,而傳入的參數是一個C++字串,輸出我是字串並把這字串印出來 • 如果做完了,可以設計一個函式叫swap,輸入是兩個C++字串,而這函式會交換兩個字串內容

  41. 釐清 • 將上頁第一個字串的練習(show),在重載一個傳入值為char *的函式 • 並在main裡面傳入C字串,看看會有何反應

  42. 釐清 • 這頁需要請作一下筆記喔~

More Related