函數(Function):是一個提前封裝好的、可重復使用的、完成特定功能的獨立代碼單元。
特點:提前封裝、可重復使用的、完成特定功能
將針對特定功能的、有重復使用需求的代碼,提前封裝到函數內, 在需要的時候隨時調用。
基礎函數語法
return語句執行后,函數立刻結束
函數不可定義在main內部
無返回值函數和void類型
函數的返回值并非是必須提供的,即可以聲明函數不提供返回值。
void say_hello(string name)
{ cout << name << "你好,我是黑馬程序員" << endl;
}
當函數不提供返回值時,需要: 聲明函數返回值類型為:void
不需要寫return語句 調用者無法得到返回值
空參函數
除了返回值以外,函數的傳入參數也是可選的,即聲明不需要參數(形參)的傳入。
void i_like_you()
{for (int i = 0; i < 5; i++) {cout << "小美,我喜歡你!!!" << endl; }
}
函數嵌套調用
函數作為一個獨立的代碼單元,可以在函數內調用其它函數。 這種嵌套調用關系沒有任何限制,可以根據需要無限嵌套。
形參聲明中,使用普通變量作為形參 其本質是將實參的值復制(賦值)給形參。
main函數下的是實參,聲明函數出的是形參。
參數的值傳遞和地址傳遞
在傳遞時,x,y的值并沒有發生變化;
傳遞地址的話,x、y的值發生了變化:
函數傳入數組
由于數組對象本身只是第一個元素的地址,所以數組傳參不區分值傳遞還是地址傳遞。 其本質都是傳遞的指針(地址)。
代碼舉例:
功能:
#include "iostream"
using namespace std;/** 需要實現:主菜單函數、查詢函數、存款函數、取款函數,共4個函數* 1. 啟動要求輸入用戶姓名* 2. 啟動后顯示主菜單,要求用戶輸入選擇* 3. 基于用戶選擇,提供相應功能* 4. 每一個功能內都能顯示余額和用戶姓名* 5. 每一個功能結束后,都會返回主菜單,當用戶輸入退出或輸入錯誤程序才退出*/void query_money(const string * const name, int * const money)
{cout << "-------------查詢余額-------------" << endl;cout << *name << ",您好,您的余額剩余:" << *money << "元" << endl;
}void save_money(const string * const name, int * const money, int num)
{cout << "-------------存款-------------" << endl;cout << *name << ",您好,您存款" << num << "元成功" << endl;// 余額發生變更*money = *money + num;cout << *name << ",您好,您的余額剩余:" << *money << "元" << endl;
}void get_money(const string * const name, int * const money, int num)
{cout << "-------------取款-------------" << endl;cout << *name << ",您好,您取款" << num << "元成功" << endl;// 余額發生變更*money = *money - num;cout << *name << ",您好,您的余額剩余:" << *money << "元" << endl;
}int menu(const string * const name)
{cout << *name << ",您好,歡迎來到黑馬銀行ATM。請選擇操作:" << endl;cout << "查詢余額\t[輸入1]" << endl;cout << "存款\t[輸入2]" << endl;cout << "取款\t[輸入3]" << endl;cout << "退出\t[輸入4]" << endl;cout << "請輸入您的選擇:";int num;cin >> num;return num;
}int main()
{// 啟動要求輸入用戶姓名string name;cout << "請輸入您的用戶名:" << endl;cin >> name;int * money = new int;*money = 500000; // 余額,默認500000元bool is_run = true;while(is_run){int select_num = menu(&name);// 對用戶輸入做選擇判斷switch (select_num){case 1:query_money(&name, money);break;case 2:int num_for_save_money;cout << "請輸入您要存多少錢:" << endl;cin >> num_for_save_money;save_money(&name, money, num_for_save_money);break;case 3:int num_for_get_money;cout << "請輸入您要取多少錢:" << endl;cin >> num_for_get_money;get_money(&name, money, num_for_get_money);break;default:cout << "程序退出" << endl;is_run = false;}}delete money;return 0;
}