C++中的函數(shù)你真的理解了嗎
1 概述
作用:將一段經(jīng)常使用的代碼進(jìn)行封裝起來(lái),減少重復(fù)代碼。
一個(gè)較大的程序,一般分為若干個(gè)程序塊,每個(gè)模塊實(shí)現(xiàn)特定的功能。
2 函數(shù)的定義及調(diào)用
函數(shù)的定義一般主要有5個(gè)步驟:
1、返回值類(lèi)型:一個(gè)函數(shù)可以返回一個(gè)值,需要知道這個(gè)值的類(lèi)型。
2、函數(shù)名:給函數(shù)起個(gè)名字。
3、參數(shù)表列:使用該函數(shù)時(shí),傳入的數(shù)據(jù)。
4、函數(shù)體語(yǔ)句:花括號(hào)內(nèi)的代碼,函數(shù)內(nèi)需要執(zhí)行的語(yǔ)句。
5、return 表達(dá)式:和返回值類(lèi)型掛鉤,函數(shù)執(zhí)行完后,返回相應(yīng)的數(shù)據(jù)。
定義語(yǔ)法:
返回值類(lèi)型 函數(shù)名(參數(shù)列表) { 函數(shù)體語(yǔ)句; return表達(dá)式; }
調(diào)用語(yǔ)法:
函數(shù)名(參數(shù))
示例:
#include<iostream> using namespace std; //返回值類(lèi)型 函數(shù)名 (參數(shù)列表){ 函數(shù)體語(yǔ)句 ; return表達(dá)式;} //定義一個(gè)兩整型數(shù)相加的函數(shù) int add(int num1, int num2)//num1和num2并沒(méi)有真實(shí)數(shù)據(jù),只是一個(gè)形式上的參數(shù),簡(jiǎn)稱(chēng)形參 { int sum = num1 + num2; return sum; } int main() { //main函數(shù)中調(diào)用add函數(shù) int a = 3, b = 4; //函數(shù)調(diào)用語(yǔ)法:函數(shù)名稱(chēng)(參數(shù)) int c = add(a, b); //a和b是真實(shí)的數(shù)據(jù),稱(chēng)為實(shí)際參數(shù),簡(jiǎn)稱(chēng)實(shí)參 cout << c << endl; system("pause"); return 0; }
3 值傳遞
- 所謂值傳遞,就是函數(shù)調(diào)用時(shí)實(shí)參將數(shù)值傳入給形參。
- 值傳遞時(shí),如果形參發(fā)生任何改變,并不會(huì)影響實(shí)參。
#include<iostream> using namespace std; //定義一個(gè)交換數(shù)字的函數(shù) //因?yàn)楹瘮?shù)沒(méi)有返回值,所以可以定義函數(shù)類(lèi)型為void-無(wú)類(lèi)型。 void swap(int num1,int num2) { cout << "交換前:" << num1 << " " << num2 << endl; int temp = num1; num1 = num2; num2 = temp; cout << "交換后:" << num1 << " " << num2 << endl; } int main() { int a = 10, b = 20; swap(a, b); //形參的改變并不影響實(shí)參本身 cout << "a = " << a << "\n" << "b = " << b << endl; system("pause"); return 0; }
值傳遞實(shí)際上是為形參開(kāi)辟一塊新的內(nèi)存地址,將實(shí)參的值傳遞給形參的內(nèi)存中,對(duì)形參進(jìn)行運(yùn)算,所以并不涉及到實(shí)參的改變。
4 函數(shù)的常見(jiàn)形式
常見(jiàn)的函數(shù)樣式有4種:
- 無(wú)參無(wú)返
- 有參無(wú)返
- 無(wú)參有返
- 有參有返
示例:
#include<iostream> using namespace std; //1.無(wú)參無(wú)返 void test01() { cout << "無(wú)參無(wú)返" << endl; } //2.有參無(wú)返 void test02(int num1,int num2) { cout << "有參無(wú)返" << num1 << num2 << endl; } //3.無(wú)參有返 int test03() { cout << "無(wú)參有返 " ; return 1000; } //4.有參有返 int test04(int num) { cout << "有參有返 " ; return num; } int main() { test01(); test02(100, 200); cout << "返回值為:" << test03() << endl; cout << "返回值為:" << test04(100) << endl; system("pause"); return 0; }
5 函數(shù)的聲明
作用:告訴編譯器函數(shù)名稱(chēng)及如何調(diào)用函數(shù)。函數(shù)的實(shí)際主體可以單獨(dú)定義。
當(dāng)自己創(chuàng)建的函數(shù)位于main函數(shù)下方的時(shí)候,編譯器會(huì)先運(yùn)行main函數(shù),從而找不到我們定義的函數(shù)而報(bào)錯(cuò),所以需要函數(shù)聲明,這樣我們的函數(shù)定義就可以放在main函數(shù)的下方了。
- 函數(shù)的聲明可以多次,但是函數(shù)的定義只能有一次。
語(yǔ)法:
數(shù)據(jù)類(lèi)型 函數(shù)名(參數(shù)列表)
示例:
#include<iostream> using namespace std; //函數(shù)的聲明 int maxtest(int a, int b); int main() { //int maxtest(int a, int b); 寫(xiě)這里也可以 int a = 10; int b = 20; cout << maxtest(a, b) << endl; system("pause"); return 0; } //定義函數(shù) int maxtest(int a, int b) { return a > b ? a : b; }
6 函數(shù)的分文件編寫(xiě)作用:讓代碼結(jié)構(gòu)更加清晰
作用:讓代碼結(jié)構(gòu)更加清晰
函數(shù)分文件編寫(xiě)一般有4個(gè)步驟:
- 創(chuàng)建后綴名為.h的頭文件
- 創(chuàng)建后綴名為.cpp的源文件
- 在頭文件中寫(xiě)函數(shù)的聲明
- 在源文件中寫(xiě)函數(shù)的定義
-----注意下面的這個(gè)例子使用了swap的函數(shù)名,而上面源文件中的函數(shù)名已經(jīng)有了swap,一個(gè)項(xiàng)目里不能對(duì)同一函數(shù)名多次定義,所以可以手動(dòng)改一下上面"值傳遞.cpp中的"的swap函數(shù)名,隨便換一個(gè)其他的就行。
1.
2.
3.
#include<iostream> using namespace std; void swap(int a, int b);
4.
#include"swap.h" void swap(int a, int b) { int temp = a; a = b; b = temp; cout << "a = " << a << endl; cout << "b = " << b << endl; }
#include<iostream> #include"swap.h" using namespace std; int main() { int a = 10, b = 20; swap(a, b); system("pause"); return 0; }
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C++實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06C++實(shí)現(xiàn)LeetCode(80.有序數(shù)組中去除重復(fù)項(xiàng)之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(80.有序數(shù)組中去除重復(fù)項(xiàng)之二),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07Linux系統(tǒng)下C語(yǔ)言gets函數(shù)出現(xiàn)警告問(wèn)題的解決方法
這篇文章主要給大家介紹了關(guān)于在Linux系統(tǒng)下C語(yǔ)言gets函數(shù)出現(xiàn)警告問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12使用Qt開(kāi)發(fā)實(shí)現(xiàn)字幕滾動(dòng)效果
我們經(jīng)常能夠在外面看到那種滾動(dòng)字幕,那么就拿qt來(lái)做一個(gè)吧,文章通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有有一定的參考價(jià)值,需要的朋友可以參考下2023-11-11C/C++?Qt?TreeWidget?單層樹(shù)形組件應(yīng)用小結(jié)
TreeWidget?目錄樹(shù)組件,該組件適用于創(chuàng)建和管理目錄樹(shù)結(jié)構(gòu),在開(kāi)發(fā)中我們經(jīng)常會(huì)把它當(dāng)作一個(gè)升級(jí)版的ListView組件使用,本文將通過(guò)TreeWidget實(shí)現(xiàn)多字段顯示,并增加一個(gè)自定義菜單,通過(guò)在指定記錄上右鍵可彈出該菜單并對(duì)指定記錄進(jìn)行操作2021-11-11C++深入分析講解類(lèi)的知識(shí)點(diǎn)
C++類(lèi),是指系統(tǒng)在第一次在程序中遇到一個(gè)類(lèi)時(shí)為這個(gè)類(lèi)建立它的所有類(lèi)變量的拷貝 - 這個(gè)類(lèi)的所有實(shí)例共享它的類(lèi)變量2022-06-06