C++面向物件基礎--引用
阿新 • • 發佈:2020-07-26
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 return0; 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 }
執行結果: