C Primer 筆記(第七章)

2021-10-07 18:13:00 字數 1902 閱讀 7388

函式可以看作程式設計師定義的操作。與內建操作符類似,每個函式都會實現一系列的計算,然後生成乙個計算結果,不同的是,函式有自己的函式名,而且運算元的個數沒有限制。

函式的定義

形式:返回型別 函式名([形參列表])

引數傳遞

引用實參

void

swap

(int

&v1,

int&v2)

//引用形參直接關聯其所繫結的物件,而並非這些物件的副本

vector和其他容器的形參

通常,函式不應該有vector或其他標準庫容器型別的形參。呼叫含有普通的非引用vector形參的函式將會複製vector的每乙個元素。可以考慮將形參宣告宣告為引用型別。

//陣列形參的定義

voida(

int*);

voida(

int)

;voida(

int[10]

);//三者等價,形參型別都為int*

//通常將陣列形參直接定義為指標要比使用陣列語法定義更好

傳遞給函式的陣列的三種處理:

main:處理命令列選項

//假設主函式main位於名為prog的可執行檔案中,可如下將實參傳遞給程式:

prog -d -o ofile data0

//實際上main定義了兩個形參:

intmain

(int argc,

char

*ar**)

//第二個形參ar**是乙個c風格字串陣列 第乙個形參argc則用於傳遞該陣列中字串的個數

//也可以這樣定義

intmain

(int argc,

char

**ar**)

//ar**中第乙個字串通常為程式的名字,接下來將額外可選的字串傳遞給主函式main,則上述命令列表示:

argc =5;

ar**[0]

="prog"

;ar**[1]

="-d"

;ar**[2]

="-o"

;ar**[3]

="ofile"

;ar**[4]

="data0"

;

return語句

兩種形式:

​ return;

​ return expression;

遞迴直接或間接呼叫自己的函式;

遞迴函式必須定義乙個終止條件,否則無限遞迴導致呼叫棧耗盡;

主函式不能呼叫自身

函式宣告

如變數必須先宣告後使用一樣,函式也是;

**在標頭檔案中提供函式宣告;**定義函式的原始檔應包含宣告該函式的標頭檔案;

區域性物件

c++中,每個名字都有作用域,而每個物件都有生命週期,就是在程式執行過程中物件存在的時間

內聯函式

類的成員函式

編譯器隱式地將在類內定義的成員函式當作內聯函式;

this指向const物件,const成員函式不能修改呼叫該函式的物件;

const物件、指向const物件的指標或引用只能用於呼叫其const成員函式;

由於this指標是隱式定義的,因此不需要在函式的形參表中包含this指標,實際上,這樣做也是非法的;

建構函式:

​ 如果沒有為乙個類顯式定義任何建構函式,編譯器將自動為這個類生成預設建構函式;

​ 合成的預設建構函式一般適用於僅包含類型別成員的類。而對於含有內建型別或復合型別成員的類,則通常應該定義它們自己的預設建構函式初始化

過載函式

出現在相同作用域中的兩個函式,如果具有相同的名字而形參表不同,包括形參型別和個數不同則稱為過載函式

指向函式的指標

C Primer 筆記 第七章 類

類的成員函式通過乙個名為 this 的隱式形參來訪問呼叫它的那個物件,在呼叫時,用請求該函式的物件位址初始化 this,this 是乙個常量指標。要將 this 宣告成指向常量的指標只需在函式的形參列表後加上 const。定義在類內部的函式是隱式的 inline 函式。類外部定義的成員名字必須包含其...

c primer 第七章 類

const更大的作用是可以修飾函式的引數,返回值,定義體。1.用const 修飾函式的引數 如果引數作輸出用,不論它是什麼資料型別,也不論它採用 指標傳遞 還是 引用傳遞 都不能加const修飾,否則該引數將失去輸出功能。const 只能修飾輸入引數 如果輸入引數採用 指標傳遞 那麼加const修飾...

C Primer 第七章 類

成員函式 宣告在類內,定義可內可外,定義在類內則是隱式內聯函式 在成員函式內部,可以直接使用呼叫該函式的物件的成員 類外部定義的成員的名字必須包含所屬類名 this本身是乙個常量指標,預設情況下指向非常量版本 在引數列表後加const可以修改this指向常量型別 編譯器首先編譯成員的宣告,然後才輪到...