1.函式的分檔案編寫:
可以將函式定義在標頭檔案(字尾為.h)中,然後進行檔案包含(參見 c語言細節.預處理器.三 部分)或編譯多原始碼檔案(參見 c語言細節.多原始碼檔案程式
的編譯,命令列引數,退出程式 部分)
2.函式的預設引數
(1)語法:
([,
...=..
.])//注意:有預設值的引數必須放在最後(其右側不能有沒有預設值的引數)
//引數說明:其他引數同 c語言基礎.函式.二.1 部分
val:指定相應引數的預設值
//例項:
#include
using
namespace std;
intf
(int i2,
int i1 =1)
intmain()
(2)函式宣告與預設引數:
不能同時在函式宣告和函式定義中指定預設引數,即使2次指定的是相同的值:
#include
using
namespace std;
intf
(int i1,
int i2 =1)
;int
main()
intf
(int i1,
int i2/* = 1*/
)//報錯:
//[error] default argument given for parameter 2 of 'int f(int, int)' [-fpermissive]
//結果:
101202
3.函式的佔位引數
(1)函式的佔位引數:
定義函式時如果只指定了某形參的資料型別,而沒有指定其變數名,就指定了1個佔位引數:
([..
.])//注意:在呼叫函式時,也需要給佔位引數傳值
//例項:
#include
using
namespace std;
voidf(
int i1,
int)
intmain()
//報錯:
//[error] too few arguments to function 'void f(int, int)'
//結果:
this is a function
(2)佔位引數的預設引數:
([=
...]
)//例項:
#include
using
namespace std;
voidf(
int i1,
int=10)
intmain()
//結果:
this is a function
4.函式過載
(1)用法:
c++支援"函式過載"
,即在1個作用域中定義多個同名函式.這些函式滿足下述要求:
①在同1個作用域內
②函式名相同
③引數必須不同
區別可以是引數的資料型別/引數的個數不同/不同型別間的順序
不能僅有形參名的區別
④函式體/返回值的資料型別可以不同,也可以相同,不能作為過載條件
呼叫時將根據傳入的引數決定究竟呼叫哪個函式;或者說,函式引數是"過載條件"
//例項:
#include
using
namespace std;
voidf(
int i)
voidf(
float i)
intf
(double i)
//void f(int i, int j)
////void f(int j, int i)
intmain()
//報錯:
//[error] redefinition of 'void f(int, int)'
//結果:
intfloat
double
0
(2)引用作為過載條件:
只有在引用作為引數時,
const等型別限定符才能作為過載條件:
#include
using
namespace std;
voidf(
const
int& i)
voidf(
int& i)
intmain()
//結果:
intconst
intconst
int
(3)函式過載與預設引數:
當函式有預設引數時,函式過載在呼叫時可能出現二義性:
#include
using
namespace std;
voidf(
int i,
int j =1)
voidf(
int i)
intmain()
//報錯:
//[error] call of overloaded 'f(int)' is ambiguous
//結果:
end
5.匿名函式:
參見:
c++
11提供了對匿名函式的支援,稱為"lambda函式"或"lambda表示式"
.lambda表示式可以被像物件一樣使用,如被賦給變數;也可以被像函式一樣
求值.具體形式如下:(..
.)->
//引數說明:
capture:
type,param:分別指定引數的資料型別和引數名
rtype:指定返回值的資料型別
body:指定函式體
C 函式引數的擴充套件
1 函式引數的預設值 c 中可以在函式宣告時為引數提供乙個預設值,當函式呼叫時沒有提供引數的址,則使用預設值 int mul int x 0 int main int argc,char ar int mul int x 引數的預設值必須在函式宣告中指定 問題 函式定義中是否可以出現引數的預設值?當...
C 基礎 函式引數擴充套件
c 中可以在函式宣告時為引數提供乙個預設值,當函式呼叫時沒有指定這個引數的值,編譯器會自動用預設值代替。include using namespace std void myprint int x 3 void myprint2 int x 3,int y 4 void myprint2 int x...
C 對C的函式擴充套件 inline內聯函式
1 c 中的const常量可以替代巨集常數定義,如 const int a 3 define a 3 2 c 中是否有解決方案替代巨集 片段呢?替代巨集 片段就可以避免巨集的 c 中推薦使用內聯函式替代巨集 片段 c 中使用inline關鍵字宣告內聯函式 說明1 inline 必須和函式體的實現,寫...