C++核心程式設計 3 函式提高
阿新 • • 發佈:2021-08-06
函式預設引數
在C++中,函式的形參列表中的形參是可以有預設值的;
語法:返回值型別函式名 (引數 =預設值){ }
例項:
#include<iostream> using namespace std; //函式預設引數 int func1(int a, int b = 20, int c = 30) //語法:返回值型別 函式名 (引數 = 預設值){ } { return a + b + c; } //注意事項 //1、如果某個位置已經有了預設引數,那麼從這個位置往後,從左到右都必須有預設引數 /* int func2(int a, int b = 10, int c, int d) ----> int func2(int a, int b = 10, int c = 20, int d = 30) { return a + b + c; }*/ //2、如果函式宣告中有預設引數,函式實現就不能有預設引數 //宣告和實現只能有一個有預設引數 int func2(int a = 10, int b = 10); // <---- int func2(int a, int b); int func2(int a, int b) // <---- int func2(int a = 10, int b = 10) { return a + b; } int main() { //cout << func1(10 , 20) << endl; //如果我們自己傳入資料,就用自己的資料,如果沒有,那麼用預設值cout << func2() << endl; system("pause"); return 0; }
函式佔位引數
C++中函式的形參列表裡可以有佔位引數,用來做佔位,呼叫函式時必須填補該位置
語法:返回值型別函式名 (資料型別){ }
例項:
#include<iostream> using namespace std; //函式佔位 void func(int a , int) //語法:返回值型別 函式名 (資料型別){ } { cout << "this is func" << endl; }int main() { func(1,1); system("pause"); return 0; }
函式過載
作用:函式名可以相同,提高複用性
函式過載滿足條件:
1、同一個作用域下;
2、函式名相同;
3、函式引數型別不同,或者個數不同,或者順序不同;
注意:函式的返回值不可以作為函式過載的條件
例項:
#include<iostream> using namespace std; //函式過載 //函式過載的滿足條件 //1、同一個作用域下 滿足:都在全域性作用域 //2、函式名相同 滿足:都叫func() void func(double a, int b) //全域性作用域 { cout << "func(double a, int b)的呼叫" << endl; } //3、函式引數型別不同,或者個數不同,或者順序不同 void func(double a, double b) //函式引數型別不同 { cout << "func(double a, double b)的呼叫!" << endl; } void func(double a, int b, int c) //函式引數個數不同 { cout << "func(double a, int b, int c)的呼叫!" << endl; } void func(int a, double b) //函式引數順序不同 { cout << "func(int a, double b)的呼叫" << endl; } int main() { func(1.0, 2); func(1.0, 2.0); //根據傳入引數的的不同,而呼叫不同的函式 func(1.0, 2, 3); func(1, 2.0); system("pause"); return 0; }
函式過載注意事項
1、引用作為過載條件;
例項:
#include<iostream> using namespace std; //函式過載的注意事項 //1、引用作為過載條件 void func(int &a) // int &a = 10; 不合法 引用必須是合法的記憶體空間,不能是常量 { cout << "func(int &a)的呼叫" << endl; } void func(const int &a) //const int &a = 10; 合法 加上const 編譯器做了一層優化,相當於建立了一個臨時資料,將a指向了一個臨時的空間 { cout << "func(const int &a)的呼叫" << endl; } int main() { //int a = 10; //func(a); //列印結果:func(int &a)的呼叫 func(10); //列印結果:func(const int &a)的呼叫 system("pause"); return 0; }
2、函式過載碰到函式預設引數
例項:
#include<iostream> using namespace std; //函式過載的注意事項 //2、函式過載碰到函式預設引數 void func2(int a, int b=10) { cout << "func2(int a, int b)的呼叫" << endl; } void func2(int a) { cout << "func2(int a)的呼叫" << endl; } int main() { //func2(10); //當函式過載碰到預設引數,出現二義性,報錯,儘量避免這種情況 func2(10, 20); system("pause"); return 0; }