明解C++教學手冊 柴田望洋 博士 著 書號:PG20269

Slides:



Advertisements
Similar presentations
大綱 1. 三角函數的導函數. 2. 反三角函數的導函數. 3. 對數函數的導函數. 4. 指數函數的導函數.
Advertisements

第一單元 建立java 程式.
程式設計 博碩文化出版發行.
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
第11章 C語言到C++語言 11-1 物件導向程式設計 11-2 青出於藍的C C++的函數特殊功能 11-4 認識類別
File Access 井民全製作.
Project 2 JMVC code tracing
Chapter 5 遞迴 資料結構導論 - C語言實作.
Chapter 5 迴圈.
Overloaded Functions 前言 處理多載函式宣告的規則 處理多載函式呼叫的規則 多載函式與 scope 函式呼叫的議決.
第十一章 結構.
Visual C++ introduction
簡易C++除錯技巧 長庚大學機械系
程式設計(二) 參考書目: 1. 洪維恩,C++ 教學手冊 第三版,旗標出版圖書公司。 2
2-3 基本數位邏輯處理※.
列舉(enum).
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
4B冊 認識公倍數和最小公倍數 公倍數和最小公倍數的關係.
使用VHDL設計—4位元位移器 通訊一甲 B 楊穎穆.
銳角三角函數的定義 授課老師:郭威廷.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
C語言簡介 日期 : 2018/12/2.
第 6 章 函式.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
第6章 函數與巨集 6-1 由上而下的設計方法 6-2 建立函數 6-3 函數的參數呼叫方式 6-4 變數的有效範圍 6-5 遞迴函數
Methods 靜宜大學資工系 蔡奇偉副教授 ©2011.
Java 程式設計 講師:FrankLin.
|12 結構與列舉型態.
程式設計實習課(四) ----C 函數運用----
第一單元 建立java 程式.
INDEX 資訊學科種子教師研習 課程說明 教學活動計畫.
第三章 資料型態與輸出控制 本章學習目標 認識Matlab的基本資料型態 練習資料型態的轉換 學習如何控制Matlab的輸出格式
|07 函數.
輸入&輸出 函數 P20~P21.
第十章 指標.
Introduction to C Programming
小學四年級數學科 8.最大公因數.
陳維魁 博士 儒林圖書公司 第三章 變數與繫結 陳維魁 博士 儒林圖書公司.
CH05. 選擇敘述.
撰寫MATLAB基礎財務程式 柯婷瑱.
第7章 指標 7-1 指標的基礎 7-2 指標變數的使用 7-3 指標運算 7-4 指標與陣列 7-5 指向函數的指標.
挑戰C++程式語言 ──第8章 進一步談字元與字串
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
函數 博碩文化出版發行.
C qsort.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
PHP5與MySQL5 入門學習指南 凱文瑞克 著 第 14 章 自定函數.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
OOP9 類別Class.
函數應用(二)與自定函數.
陣列與結構.
12 虛擬函數 12.1 多載與超載 12-2 多載函數 12-2 超載函數 虛擬函數 12-6 同名異式 12-7
#include <iostream.h>
第七章 資料轉換和 個案選擇 7.1 前言 7.2 〝Recode〞功能 7.3 〝Compute〞功能 7.4 〝Count〞功能
資料表示方法 資料儲存單位.
Chap 6 函數 故用兵之法,十則圍之,五則攻之,倍則分之, 敵則能戰之,少則能逃之,不若則能避之。 故小敵之堅,大敵之擒也。
第一章 直角坐標系 1-3 函數及其圖形.
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
電子郵件簡報.
適用於多選一 可減少if 與 else配對混淆的錯誤.
作業系統實習課(二) -Scheduler-Related System Calls-
Chapter 6 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
Array(陣列) Anny
Chapter 4 Multi-Threads (多執行緒).
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

明解C++教學手冊 柴田望洋 博士 著 書號:PG20269

第五章 函數的基本 函數就是由一連串的處理匯整而成的程式組件。本章所要學習的就是函數的基本知識。

5-1 函數 函數 函數(function)是程式的組件,它是由一連串的處理匯整而成。 函數的定義如下:

未使用函數的程式:

使用了函數的程式:

可在函數呼叫運算式中賦予引數(argument),而被呼叫之函數所產生的參數(parameter),則會以引數的值來初始化。

跳躍敘述 Break敘述、continue敘述、return敘述和goto敘述統稱為跳躍敘述(jump statement)。

main函數 使用函數改寫List 2-10的程式如下:

函數原型宣告 被呼叫方的函數要定義在前面,而呼叫方的函數則必須定義在後面。 錯誤:找不到函數max的宣告

爲了呼叫沒有定義在前面的函數,所以才需要函數原型宣告(function prototype declaration)。

傳值 將值作為引數來交換的機制,就稱為傳值(pass by value)。

活用傳值的優點就能讓函數更為簡潔。

不接收引數的函數 判斷函數呼叫運算式所得到的值會是true或false。

void函數 不會傳回值的函數之傳回值型態必須宣告為void。

函數的泛用性 此程式將任意字元排列為直角三角形。

預設引數和引數的型態 在函數原型宣告中設定預設引數(default argument)之後,就可以在呼叫函數時省略引數了。 傳遞和參數不同型態的引數時,會視需要進行型態轉換。

5-2 參照和傳值 傳值的極限 右側程式必須以傳址(pass by reference)來實現:

參照 在理解何謂傳址之前,必須先瞭解參照(reference)。

傳址 下列程式為以傳址改寫的List 5-12:

傳值和傳址的差異: 傳值 ─ 引數的值不可能被改寫。 傳址 ─ 引數的值有可能被改寫。

三個值的排序

先比較a和b的值,若a大於b就將它們的值交換。 再比較b和c的值,若b大於c就將它們的值交換。 c的值已經是最大值,接著比較a和b的值,並將較大一方的值存放在b。

5-3 試著調查整數的內部 整數的內部 無符號整數的內部表示

有符號整數的內部表示

無符號整數/有符號整數的表示範圍:

位元單位的邏輯運算 「&」叫做位元積運算子(biteise AND operator)。 「|」叫做位元和運算子(bitwise inclusive operator)。 「^」叫做位元差運算子(bitwise exclusive OR operator)。 「~」叫做補數運算子(complement operator)。

位移運算 「<<」運算子和「>>」運算子統稱為位元單位的位移運算子(bitwise shift operator)。

邏輯位移和算數位移

計算位元數 取得unsigned型態的位元數 顯示位元內容

5-4 生存空間和生命週期 生存空間 生存空間(scope)是用來劃分變數的適用範圍。 生存空間可分為: 5-4 生存空間和生命週期 生存空間 生存空間(scope)是用來劃分變數的適用範圍。 生存空間可分為: 檔案生存空間 區塊生存空間 「::」就是範圍解析運算子(scope resolution operator)。

生命週期 變數的壽命就是生命週期(storage duration),可以使用記憶類別指定字(storage duration specifier)來指定變數的生命週期。

生命週期可分為: 自動生命週期 (automatic storage duration) 沒有加上記憶類別指定字來定義的物件。 靜態生命週期 (static storage duration) 加上static來宣告的物件。 動態生命週期 (dynamic storage duration) 將在第六章學習。

傳回參照的函數

5-5 多載和行內函數 函數的多載 定義多個名稱名稱相同的函數,就稱為函數的多載(overloading)。 5-5 多載和行內函數 函數的多載 定義多個名稱名稱相同的函數,就稱為函數的多載(overloading)。 多載的函數之引數型態與個數一定要不同。 對於進行類似處理的函數,就可以給予相同名稱來多載。 main函數無法進行多載。

行內函數 較短的函數可以定義為行內函數(inline function)。 行內函數不會使程式的執行速度降低。 行內函數的定義如下:

總結 一連串的處理可以匯整成函數(程式組件)來實作。 函數是透過傳回值型態、名稱、參數的個數和型態來被賦予特徵。函數的主體是區塊。 可以對不同的函數給予相同的名稱來進行多載。不過,這些函數必須可以透過參數的個數和型態來識別。 函數所接收到的參數會以呼叫方所傳遞的引數來初始化。 原則上,引數的傳遞是以傳值來進行。因此,即使改變接收到的參數的值,引數的值也不會跟著改變。 在呼叫時所省略的引數,會自動地以預設引數來填補。

在函數內進行return敘述時,程式的流程就會回到呼叫源。如果不是void函數的話,就可以在回到呼叫源時將值傳回。 只要判斷函數呼叫運算式,就可以得到被傳回的值。 傳回參照的函數之呼叫運算式,會變成可以放在指定的左邊的左值運算式。 加上inline來定義的行內函數,會被展開並嵌入程式之中。規模較小且要求高速性的函數,最好是設為行內函數。 和行內函數相似的是類似函數巨集,使用時必須考量是否會有副作用。 被呼叫方的函數要在前面定義,而呼叫方的函數則要在後面定義。 為了呼叫沒有在前方定義的函數,就需要函數原型宣告。

在函數之外定義的變數,擁有到檔案尾端為止都可使用其名稱的檔案生存空間。而在函數之中定義的變數,則擁有到區塊尾端為止都可使用其名稱的區塊生存空間。 同時存在著名稱相同但生存空間不同的變數時,可以看見位於較內側者,而看不見位於較外側者。只要使用範圍解析運算子「::」,就可以存取擁有檔案生存空間的變數。 在函數之外定義的物件,以及加上static且在函數之中定義的物件,都擁有從程式開始到結束為止都存在的靜態生命週期。當沒有明確地初始化時,則會以0來初始化。 在函數之中且沒有加上static來定義的物件,會擁有到區塊尾端為止都存在的自動生命週期。當沒有明確地初始化時,則會以不定值來初始化。