第11章 函式

2021-08-01 15:19:34 字數 3809 閱讀 5544

1、 

把相關的語句組合在一起,並且賦予相應的名稱,用這種方法來給程式分塊,這種形式的組合就是函式,函式也叫例程或者過程。

程式總是從

main

()函式開始啟動。

函式由函式名、引數、返回值型別以及一組包含操作語句的語句塊組成。函式可以支援過載,程式就是由函式組成。

2、 形參是函式定義時在形參表中定義的,並且由呼叫函式時傳遞函式的實參所初始化。形參為函式提供了已經命名的區域性儲存空間。

函式形參表可以為空,但不能省略。沒有任何形參的函式可以用空形參表或含有單個關鍵字void的形參表來表示。

3、

c++支援函式引數個數不確定的

,當不知道有多少個引數或型別只知道其中的乙個或幾個,

可以用隱藏引數代替

,不知道的用……來代替,呼叫時只需要處理所知道的引數。

4、

在類宣告的內部宣告或定義的成員函式叫做內聯函式。

引入內聯函式的目的是為了解決程式中函式呼叫的效率問題。一般來說,

內聯機制適用於優化小的、只有幾行的而且經常被呼叫的函式。

在類宣告的內部宣告,而在類宣告外部定義叫做

顯示內聯函式

在類宣告的內部定義,叫做

隱式內聯函式

注意

:在內聯函式內不允許用迴圈語句和開關語句。如果內聯函式有這些語句,則編譯將該函式視同普通函式那樣產生函式呼叫**,遞迴函式是不能被用來做內聯函式的。

內聯函式只適合於只有

1~5行的小函式。內聯函式的定義必須出現在內聯函式第一次被呼叫之前。

5、  

把引用變數當成形參傳遞就是引用形參,由於引用變數指向的是同乙個記憶體位址,

引用傳遞表面上傳的是變數,實際上傳的是變數的位址

。引用形參把對變數的操作,隱式地轉成通過變數位址來對變數操作。

注意:呼叫非

const

型別的引用形參,實參必須不是

const

,而且實參的型別和形參的型別應該一致。

指標形參是指函式的引數是指標

,它不會像引用形參那樣通過函式呼叫影響實參的值,但是

呼叫後會修改實參的物件

。程式中盡量少用指標形參,這樣會使程式的可讀性下降。

6、

內部,宣告成員函式是必需的,而定義成員函式是可選的。

在類外部定義的成員函式必須指明它們是在類的作用域中。

類成員函式分為內聯函式和外聯函式。

內聯函式

是指定義在類體內的成員函式,即該函式的函式體放在類體內。而申明在類體內,定義在類體外的成員函式叫

外聯函式。

注意:

內聯函式與帶引數的巨集定義進行比較,它們的

**效率是相同的

。但是內聯函式優於巨集定義

,因為內聯函式遵循型別和作用域規則,與一般函式更接近。

內聯函式中的執行**不能過多,如果內聯函式的函式體過大,一般編譯器會放棄內聯方式,而採用普通的方式呼叫函式。

類內部的函式無論是否使用

inline

關鍵字,都被預設為內聯函式,而外部的函式使用

inline

關鍵字定義為類的內聯函式。

類成員中的函式就是類的成員函式,特別的類成員函式由建構函式和析構函式。

7、 

靜態函式使用

static

關鍵字修飾的函式,

靜態成員函式的宣告除了在類體的函式宣告前加上關鍵

static

,以及不能宣告為

const

或volatile

之外,與非靜態成員函式一樣。

靜態函式只能訪問靜態變數。

出現在類體之外的函式定義不能制定為關鍵字

static

注意:靜態函式沒有

this

指標。

靜態函式不能被其他檔案所用,其他檔案中可以定義相同名字的函式,在類中如果函式呼叫的結果不會訪問或者修改任何物件資料成員,這樣的成員宣告為靜態成員函式比較好。

8、  

靜態函式只能直接訪問類的靜態私有成員,靜態函式不可以直接訪問類的非靜態私有成員,但是可以通過自定義的一些方法如巨集定義替換訪問類的非靜態私有成員。(靜態成員函式可以借助物件名和指標來訪問類的非靜態私有成員。)

注意:外部類可以使用巨集定義等特殊方式來實現訪問類的私有成員。

9、  

函式過載:在相同的作用域中,具有相同的名稱而形參列表不同的多個函式。通過執行同樣的操作,但應用不同形參的一組函式,可以簡化程式的實現,使程式更加易懂。

函式匹配有

3種結構:

1)

編譯器找到與實參最佳匹配的函式,並生產呼叫該函式的**;

2)

編譯器找不到形參與函式呼叫的實參匹配的函式,編譯器報錯

3)

存在多個域實參匹配的函式,但沒有乙個明顯的最佳選擇。

在函式過載匹配時,先通過標準轉換來實現匹配,如果不行,再通過類型別轉換裡實現匹配。

為確定最佳匹配,編譯器將實參型別到相應形參型別轉換劃分等級。

轉換等級以降序排列如下:

1)

精確匹配,實參與形參型別相同

2)

通過型別提公升實現的匹配

3)

通過標準轉換實現的匹配

4) 

通過類型別轉換實現的匹配

第11章 執行緒

執行緒標識 就像每個程序有乙個程序id一樣,每個執行緒也有乙個執行緒id。程序id在整個系統中是唯一的,但執行緒id不同,執行緒id只有在它所屬的程序上下文中才有意義。程序id 用pid t資料型別表示 執行緒id用pthread t資料型別來表示 includeint pthread equal ...

第11章 執行緒

1.執行緒的作用 1 對於程式設計而言 當我們的乙個程序在某一時刻,需要做的事件不止一件的時候,一般有兩種方法。一種是採用非同步程式設計的模式,一種是採用多執行緒同步模式。但是多執行緒同步模式遠遠比非同步模式要方便的多。但是對於單核系統,往往非同步程式設計模式效率更高。2 對於互動程式,一般都是要多...

第11章 註解

annotation其實就是 裡的特殊標記,可以在編譯,類載入,執行的時候被讀取,並執行相應的處理。在不改變原有邏輯的情況下,在原始檔嵌入一些補充資訊。一條重要原則 僅僅使用註解來標識程式元素,對程式不會造成任何影響,要讓註解起作用,必須為這些註解提供註解處理工具。override只能修飾方法,強制...