函數默認參數 函數重載 引用


一.函數默認參數

1.缺省參數:就是在聲明函數的某個參數的時候 給他一個默認值

 1 #include<iostream>
 2 using namespace std;
 3 
 4 void Show(int a = 1,int b = 2,int c = 3)
 5 {
 6     cout << a << endl;
 7     cout << b << endl;
 8     cout << c << endl;
 9 }
10 
11 int main()
12 {
13     Show();
14     return 0;
15 }

2.函數的參數可以存默認值 在調用的時候就可以不用去傳了

但也可以傳參 傳了就把默認值覆蓋 傳幾個都行 但是第一個不傳不可以 因為這是有一種壓棧的過程的 后面不傳可以

但是在聲明函數的時候 前面的默認值可以不給

 1 #include<iostream>
 2 using namespace std;
 3 
 4 void Show(int a,int b = 2,int c = 3)
 5 {
 6     cout << a << endl;
 7     cout << b << endl;
 8     cout << c << endl;
 9 }
10 
11 int main()
12 {
13     Show(100);
14     return 0;
15 }

3.總結:

默認參數值一定在右邊 中間是不可以空缺的

默認參數一定要在聲明函數中寫

二.函數重載

在同一個作用域中 函數名一樣 參數列表不同(即參數個數或類型不同)

根據調用的什么類型的參數 給幾個 就會去執行對應的函數

 1 #include<iostream>
 2 using namespace std;
 3 
 4 void Area(int r)
 5 {
 6     cout << r*r*3.14 << endl;
 7 }
 8 
 9 void Area(int l,int h)
10 {
11     cout << l*h <<endl;
12 }
13 
14 int main()
15 {
16     Area(1);
17     Area(1,2);
18     return 0;
19 }

三.引用

1.定義:是C++語言的一個特殊的數據類型的描述 可以理解為“起小名”

用於在程序的不同部分使用兩個以上的變量名指定同一地址 這樣就使對其中任何一個變量操作都是對同一地址單元進行的

在這種兩個以上變量名的關系上 被聲明為引用類型的變量名就是實際變量名的別名

注意:定義引用 一定要初始化!!!

2.引用運算符:&

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int a = 100;
 6     int& k = a;
 7     k = 200;
 8     cout << a << endl;
 9 
10     return 0;
11 }

對引用操作 就是對引用的變量進行操作

引用不是值 不占存儲空間 聲明引用的時候 目標的存儲狀態不會改變

一旦引用被初始化 就不能再重新引用其他空間

3.指針和引用的區別:

①引用定義了就要初始化 但是指針不用

②引用初始化后不能再重新引用其他空間 但是指針可以動

③引用沒有空的 但是有空指針

引用一定要保證:引用的是一個合法的存儲單元

4.引用的優點:空間 效率 安全

5.在使用的時候 如何選擇指針和引用:

①如果要裝地址 或者有地址偏移的操作 那就用指針(new)

②如果要對單一的空間進行操作 引用就可以

6.“引用”通常作為函數的參數 那么傳參的方式可以分為以下三種:

①值傳遞:

 1 #include<iostream>
 2 using namespace std;
 3 
 4 void Change(int x,int y)
 5 {
 6     int temp = x;
 7     x = y;
 8     y = temp;
 9 }
10 
11 int main()
12 {
13     int a = 100;
14     int b = 200;
15     Change(a,b);
16     
17     cout << a << endl;
18     cout << b << endl;
19 
20     return 0;
21 }

交換兩數 交換x和y 執行結束空間被回收 a和b沒有被交換

②地址傳遞:

 1 #include<iostream>
 2 using namespace std;
 3 
 4 void Change(int* x,int* y)
 5 {
 6     int temp = *x;
 7     *x = *y;
 8     *y = temp;
 9 }
10 
11 int main()
12 {
13     int a = 100;
14     int b = 200;
15     Change(&a,&b);
16     
17     cout << a << endl;
18     cout << b << endl;
19 
20     return 0;
21 }

間接操作所指向的兩塊空間 a和b交換

③引用傳遞:

 1 #include<iostream>
 2 using namespace std;
 3 
 4 void Change(int& x,int& y)
 5 {
 6     int temp = x;
 7     x = y;
 8     y = temp;
 9 }
10 
11 int main()
12 {
13     int a = 100;
14     int b = 200;
15     Change(a,b);
16     
17     cout << a << endl;
18     cout << b << endl;
19 
20     return 0;
21 }

對x和y操作就是對a和b進行操作 a和b成功交換 (PS:碼到這里真的覺得引用真的好方便阿~)

7.總結:空間變量是看生命周期去選的 要控制生命周期就要選堆區

可以看是否要修改傳入的內容 不改就用值傳遞 改就用地址或者引用

接着看傳進來的是不是new的 是不是地址 是就用指針 不是地址就用引用就可以了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM