引用
定義:變數的別名
引用的宣告:型別識別符號 &引用名=目標變數名;
引用的主要功能:作為函式的引數或返回值
void main(){
int a = 10;
int &b = a;
cout <<"引用:"<< b << endl;
getchar();
}
複製程式碼
說明:
1、一開始定義引用必須要賦值
2、引用的大小很像指標
3、引用的本質是:指標常量
上圖中,p = &b顯示錯誤,是p儲存的地址不能改變。
void modify(int &a){
a = 200;
}
void modifyB(int * const a)
{
*a = 150;
}
void main(){
int a = 10;
int b = 5;
//指標常量(這個指標所儲存的地址不能改變)
int * const p = &a;
//p = &b; //不能改變
int x = 5;
cout << x << endl;
modify(x);
cout << x << endl;
modifyB(&x);
cout << x << endl;
getchar();
}
複製程式碼
函式
函式的使用通常包含以下幾個步驟:
1)、函式宣告:說明函式的名字、引數、返回型別。
說明:系統函式的宣告通常放在標頭檔案中
2)、函式呼叫:提供呼叫函式,實現相應功能,返回結果
result = square_sum(array, 5);
複製程式碼
3)、函式定義
三種型別引數傳遞 1、值傳遞:(函式不能實現實參值交換功能)
void swap(int a, int b){
int c = 0;
c = a;
a = b;
b = c;
}
void main(){
int a = 10;
int b = 5;
cout << "交換前:" << "a---->" << a <<" b---->"<< b << endl;
swap(a,b);
cout << "交換後:" << "a---->" << a << " b---->" << b << endl;
getchar();
}
複製程式碼
2、指標傳遞:(實參、形參指向同一記憶體空間,函式能實現實參值交換功能)
void swap(int *a,int *b){
int c = 0;
c = *a;
*a = *b;
*b = c;
}
void main(){
int a = 10;
int b = 5;
cout << "交換前:" << "a---->" << a <<" b---->"<< b << endl;
swap(a,b);
cout << "交換後:" << "a---->" << a << " b---->" << b << endl;
getchar();
}
複製程式碼
3、引用傳遞:(形參是引數的別名,函式能實現實參值交換功能。形式更加直觀)
void swap(int &a, int &b){
int c = 0;
c = a;
a = b;
b = c;
}
void main(){
int a = 10;
int b = 5;
cout << "交換前:" << "a---->" << a <<" b---->"<< b << endl;
swap(a,b);
cout << "交換後:" << "a---->" << a << " b---->" << b << endl;
getchar();
}
複製程式碼
行內函數(又稱內建函式或內嵌函式)
行內函數與普通函式的區別:編譯器直接將其函式程式碼插入到呼叫處。這樣呼叫它時,就不會有壓棧出棧問題(函式呼叫時用棧來傳遞引數和控制程式轉移),因而其執行速度很快。
行內函數的宣告與定義:在普通函式的基礎上加inline關鍵字 (這並不意味著加了inline後就一定是行內函數)
inline void modify(int &a){
a = 200;
}
void main(){
int a = 10;
int b = 5;
modify(a);
cout << a << endl;
getchar();
}
複製程式碼
說明: 使用行內函數是一種用空間換時間的措施,若行內函數較長,且呼叫太頻繁時,程式將加長很多。因此,通常只有較短的函式(一般為5個語句以下)才定義為行內函數,對於較長的函式最好作為普通函式處理。
通常,行內函數還有如下的限制:
1)不能有遞迴;
2)不能包含靜態資料;
3)不能包含迴圈;
4)不能包含switch和goto語句;
5)不能包含陣列。 若一個行內函數定義不滿足以上要求,則編譯系統把它當作普通函式對待。
帶有預設引數值的函式
C++還允許在函式宣告或函式定義中為形參指定一個預設值。在呼叫此類含預設值形參的函式時,如果形參有對應的實參,則將實參傳遞給形參;如果省略了實參,則將上述預設值傳遞給形參。
void printa(int a = 20){
cout << "a的值:" << a << endl;
}
void main(){
int a = 10;
int b = 5;
printa();
printa(a);//覆蓋預設a的值
getchar();
}
複製程式碼
如果函式有多個預設引數,則預設引數必須是從右向左定義,並且在一個預設引數的右邊不能有未指定預設值的引數。(原因:編譯器在實參與形參對應時是按從左到右順序進行的)
特別注意:如果在函式原型的宣告中設定了函式引數的預設值,則不可再在函式定義的頭部重複設定,否則編譯時將出錯。
過載函式
C++允許用同一個函式名定義多個函式(即“一名多用”),這些函式的引數個數或引數型別不同。這就是函式過載(function overloading)。 優點:便於記憶
void printa(int a){
cout << "a的值:" << a << endl;
}
void printa(float a, int b){
cout << "a的值:" << a << endl;
}
void printa(double a,int b,int c){
cout << "a的值:" << a << endl;
}
void printa(char* c, int a){
cout << "a的值:" << a << endl;
}
void main(){
int a = 10;
int b = 5;
printa(a);//覆蓋預設a的值
getchar();
}
複製程式碼
區分依據標準:通過函式的引數個數、引數型別、引數順序不同來區分
注意:過載函式的使用與普通函式類似,每一個函式都要進行宣告與定義。
(4)注意事項:
1)不可以定義兩個具有相同名稱、相同引數型別和相同引數個數,只是函式返回值不同的函式
2)如果某個函式引數有預設值,必須保證其引數預設後呼叫形式不與其它函式混淆。
系統函式
標準C++函式:各種編譯環境普遍支援,具有良好的移植性,建議優先使用。
標頭檔案:如 cmath(或math.h)、 cstdlib(或stdlib.h)等
參考網站:http ://www.cppreference.com
非標準C++函式:當前作業系統或編譯環境特有的,如:檔案操作函式等。不同系統薦在差異,即是同一系統也有不同版本的不同。