函式可以看作程式設計師定義的操作。與內建操作符類似,每個函式都會實現一系列的計算,然後生成乙個計算結果,不同的是,函式有自己的函式名,而且運算元的個數沒有限制。
函式的定義
形式:返回型別 函式名([形參列表])
引數傳遞
引用實參
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指向常量型別 編譯器首先編譯成員的宣告,然後才輪到...