C 學習之函式

2021-09-11 23:20:09 字數 2455 閱讀 9207

函式是定義好的、可重用的功能模組。

定義函式是將乙個模組的演算法用c++描述出來。

函式名是功能模組的名字。

函式的引數是計算所需要的資料和條件。

函式的返回值:需要返回的計算結果。

函式名形式參數列

語句序列

型別識別符號

呼叫函式需要先宣告函式原型。

函式的定義在呼叫之前,則可以不用宣告函式原型,若在呼叫之後,則必須在呼叫函式前宣告函式原型。

函式原型:型別識別符號  被呼叫的函式名 (含型別說明的形參表)

函式呼叫的形式:函式名(實參列表)

函式的巢狀呼叫:指在乙個函式的函式體中,呼叫另一函式。

函式的遞迴呼叫:函式直接或間接的呼叫自身,稱為遞迴呼叫。

值傳遞引用可以作為雙向傳遞。

引用(&)是識別符號的別名,例如:

int i, j;

int &ri = i;    //定義int引用ri,並初始化為變數i的引用。

定義乙個引用時,必須同時對它進行初始化,使它指向乙個已存在的物件。

j = 10;

ri = j;     //相當於i = j;

定義乙個引用後,這個引用就只能指向這個變數而不能改變指向。

引用可以作為形參。

實現乙個可變長度的形參表。

c++標準中提供了兩種主要的方法:

1、如果所有的實參型別相同,可以傳遞乙個名為initializer_list的標準庫型別;

2、如果實參的型別不同,我們可以編寫可變引數的模板(之後介紹)

initislizer_list是一種標準庫模板,用於表示某種特定型別的值的陣列,該型別定義在同名的標頭檔案中。

initislizer_list的使用方法:

initislizer_list是乙個類模板,使用模板時,我們需要在模板名字後面跟一對尖括號,括號內給出型別引數。

例如:initislizer_listls;   //initislizer_list的元素型別是string

initislizer_listli;     //initislizer_list的元素型別是int

initislizer_list比較特殊的一點是,其物件中的元素永遠是常量值,我們無法改變initislizer_list物件中元素的值。

含有initislizer_list形參的函式也可以同時擁有其他形參。

用來實現一種不太複雜的功能,並且要加快執行速度時選用內聯函式。

宣告時使用關鍵字inline

編譯時在呼叫處用函式體進行替換,節省了引數傳遞、控制轉移等開銷。

注意:內聯函式體內不能有迴圈語句和switch語句;

內聯函式的定義必須出現在內聯函式第一次被呼叫之前;

對內聯函式不能進行異常介面宣告。

語法規定:constexpr修飾的函式在其所有引數都是constexpr時,一定返回constexpr。

函式體中必須有且只有一條return語句。

例如:

constexpr int get_size() 

constexpr int foo = get_size(); //正確,foo是乙個常量表示式

可以預先設定預設的引數值,呼叫時如給出實參,則採用實參值,否則採用預先設定的預設引數值。

注意:有預設引數的形參必須列在形參列表的最右,即預設引數值的右面不能有無預設值的引數。

呼叫時實參與形參的結合次序是從左向右。

例如:

int add(int x, int y = 5, int z = 6);//正確

int add(int x = 1, int y = 5, int z);//錯誤

int add(int x = 1, int y, int z = 6);//錯誤

預設引數值與函式的呼叫位置:

如果乙個函式有原型宣告,且原型宣告在定義之前,則預設引數值應在函式原型宣告中給出;

如果只有函式的定義,或函式定義在前,則預設引數值可以函式定義中給出。

c++允許功能相近的函式在相同的作用域內以相同的函式名宣告,從而形成過載,方便使用,便於記憶。

過載函式的形參必須不同,個數不同或型別不同。

編譯程式將根據實參和形參的型別及個數的最佳匹配來選擇呼叫哪乙個函式。

不要講不同功能的函式宣告為過載函式,以免出現呼叫結果的誤解、混淆。如:

學習C 之函式

將一塊複雜的 或可能重複利用的 單獨的封裝起來,就稱之為函式。在 需要使用這段 就在 呼叫對應的函式即可。修飾符 返回值型別 函式名稱 引數列表 static void 函式名稱 static void print console.writeline static void test static ...

C 學習之函式

函式預設引數 返回值型別 函式名 引數 預設值 如果傳入自己得資料,就用自己的資料,沒有進行引數的傳遞,就會直接使用預設值。注意事項 如果某個位置,已經有了預設引數,那麼從這個位置往後,從左到右必須有預設值。如果函式宣告有預設引數,函式實現就不能有預設引數。宣告和實現只能有乙個預設引數。函式的佔位引...

C 學習之 虛函式

靜態聯編 運算子過載 過載函式是通過 名字壓延 方法來實現。即在編譯時將函式名和引數結合起來創造乙個新的函式名,用新的名字替換原有名字。執行時多型性虛函式是在類定義中的函式原型宣告前加乙個關鍵字virtual。在派生類中重新定義時,它的函式原型 包括返回型別,函式名,引數個數和引數型別 必須與基類中...