1. 程式人生 > 實用技巧 >C++面向物件基礎--引用

C++面向物件基礎--引用

1.引用的基本使用

作用:給變數起別名

語法:資料型別&別名 = 原名

程式碼示例:

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

執行結果:

2.引用注意事項

(1)引用必須初始化

(2)引用在初始化後,不可以改變

程式碼示例:

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5 
 6     int a = 10;
 7     int b = 20
; 8 //int &c; //錯誤,引用必須初始化 9 int& c = a; //一旦初始化後,就不可以更改 10 c = b; //這是賦值操作,不是更改引用 11 12 cout << "a = " << a << endl; 13 cout << "b = " << b << endl; 14 cout << "c = " << c << endl; 15 16 system("pause"); 17 18 return
0; 19 }

執行結果:

3.引用做函式引數

作用:函式傳參時,可以利用引用的技術讓形參修飾實參

優點:可以簡化指標修改實參

程式碼示例:

 1 #include<iostream>
 2 using namespace std;
 3 //1. 值傳遞
 4 void mySwap01(int a, int b) 
 5 {
 6     int temp = a;
 7     a = b;
 8     b = temp;
 9 }
10 
11 //2. 地址傳遞
12 void mySwap02(int* a, int* b)
13 {
14     int temp = *a;
15     *a = *b;
16     *b = temp;
17 }
18 
19 //3. 引用傳遞
20 void mySwap03(int& a, int& b)
21 {
22     int temp = a;
23     a = b;
24     b = temp;
25 }
26 
27 int main() 
28 {
29 
30     int a = 10;
31     int b = 20;
32 
33     mySwap01(a, b);
34     cout << "a:" << a << " b:" << b << endl;
35 
36     mySwap02(&a, &b);
37     cout << "a:" << a << " b:" << b << endl;
38 
39     mySwap03(a, b);
40     cout << "a:" << a << " b:" << b << endl;
41 
42     system("pause");
43 
44     return 0;
45 }

執行結果:

總結:通過引用引數產生的效果同按地址傳遞是一樣的。引用的語法更清楚簡單

4.引用做函式返回值

作用:引用是可以作為函式的返回值存在的

注意:不要返回區域性變數引用

用法:函式呼叫作為左值

程式碼示例:

 1 #include<iostream>
 2 using namespace std;
 3 //返回區域性變數引用
 4 int& test01()
 5 {
 6     int a = 10; //區域性變數
 7     return a;
 8 }
 9 
10 //返回靜態變數引用
11 int& test02()
12 {
13     static int a = 20;
14     return a;
15 }
16 
17 int main()
18 {
19 
20     //不能返回區域性變數的引用
21     int& ref = test01();
22     cout << "ref = " << ref << endl;
23     cout << "ref = " << ref << endl;
24 
25     //如果函式做左值,那麼必須返回引用
26     int& ref2 = test02();
27     cout << "ref2 = " << ref2 << endl;
28     cout << "ref2 = " << ref2 << endl;
29 
30     test02() = 1000;
31 
32     cout << "ref2 = " << ref2 << endl;
33     cout << "ref2 = " << ref2 << endl;
34 
35     system("pause");
36 
37     return 0;
38 }

執行結果:

5.引用的本質

本質:引用的本質在c++內部實現是一個指標常量

程式碼示例:

 1 #include<iostream>
 2 using namespace std;
 3 //發現是引用,轉換為 int* const ref = &a;
 4 void func(int& ref)
 5 {
 6     ref = 100; // ref是引用,轉換為*ref = 100
 7 }
 8 int main()
 9 {
10     int a = 10;
11 
12     //自動轉換為 int* const ref = &a; 指標常量是指標指向不可改,也說明為什麼引用不可更改
13     int& ref = a;
14     ref = 20; //內部發現ref是引用,自動幫我們轉換為: *ref = 20;
15 
16     cout << "a:" << a << endl;
17     cout << "ref:" << ref << endl;
18 
19     func(a);
20     return 0;
21 }

執行結果:

結論:C++推薦用引用技術,因為語法方便,引用本質是指標常量,但是所有的指標操作編譯器都幫我們做了

6.常量引用

作用:常量引用主要用來修飾形參,防止誤操作

在函式形參列表中,可以加const修飾形參,防止形參改變實參

程式碼示例:

 1 #include<iostream>
 2 using namespace std;
 3 //引用使用的場景,通常用來修飾形參
 4 void showValue(const int& v) 
 5 {
 6     //v += 10;
 7     cout << v << endl;
 8 }
 9 
10 int main()
11 {
12 
13     //int& ref = 10;  引用本身需要一個合法的記憶體空間,因此這行錯誤
14     //加入const就可以了,編譯器優化程式碼,int temp = 10; const int& ref = temp;
15     const int& ref = 10;
16 
17     //ref = 100;  //加入const後不可以修改變數
18     cout << ref << endl;
19 
20     //函式中利用常量引用防止誤操作修改實參
21     int a = 10;
22     showValue(a);
23 
24     system("pause");
25 
26     return 0;
27 }

執行結果: