數組操作符重載
阿新 • • 發佈:2018-12-15
運算 str clu ons 指針運算 參數 指針與數組 isdigit 類的成員
C++裏面也可使用數組運算操作符:
例如:
1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 int main() 7 { 8 string s = "a1b2c3d4e"; 9 int n = 0; 10 11 for(int i = 0; i<s.length(); i++) 12 { 13 if( isdigit(s[i]) ) 14 { 15 n++;16 } 17 } 18 19 cout << n << endl; 20 21 return 0; 22 }
但是不是我們定義 了一個類後,就可以使用數組訪問操作符了呢?
被忽略的事實:
-數組訪問符是C/C++的內置操作符;
-數組訪問符的原生意義:數組訪問和指針運算。
例如:
a[n] <->*(a+n) <->*(n+a) <-> n[a]
指針與數組的復習.cpp:
1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 int main() 7 { 8 int a[5] = {0}; 9 10 for(int i=0; i<5; i++) 11 { 12 a[i] = i; 13 } 14 15 for(int i=0; i<5; i++) 16 { 17 cout << *(a + i) << endl; // cout << a[i] << endl; 18 }19 20 cout << endl; 21 22 for(int i=0; i<5; i++) 23 { 24 i[a] = i + 10; // a[i] = i + 10; 25 } 26 27 for(int i=0; i<5; i++) 28 { 29 cout << *(i + a) << endl; // cout << a[i] << endl; 30 } 31 32 return 0; 33 }
重載數組訪問操作符:
-數組訪問操作符(【】)
-只能通過類的成員函數重載
-重載函數能且僅能使用一個參數
-可以定義不同參數的多個重載函數。
實例二(非常有意義):
1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 class Test 7 { 8 int a[5]; 9 public: 10 int& operator [] (int i) 11 { 12 return a[i]; 13 } 14 15 int& operator [] (const string& s) 16 { 17 if( s == "1st" ) 18 { 19 return a[0]; 20 } 21 else if( s == "2nd" ) 22 { 23 return a[1]; 24 } 25 else if( s == "3rd" ) 26 { 27 return a[2]; 28 } 29 else if( s == "4th" ) 30 { 31 return a[3]; 32 } 33 else if( s == "5th" ) 34 { 35 return a[4]; 36 } 37 38 return a[0]; 39 } 40 41 int length() 42 { 43 return 5; 44 } 45 }; 46 47 int main() 48 { 49 Test t; 50 51 for(int i=0; i<t.length(); i++) 52 { 53 t[i] = i; 54 } 55 56 for(int i=0; i<t.length(); i++) 57 { 58 cout << t[i] << endl; 59 } 60 61 cout << t["5th"] << endl; 62 cout << t["4th"] << endl; 63 cout << t["3rd"] << endl; 64 cout << t["2nd"] << endl; 65 cout << t["1st"] << endl; 66 67 return 0; 68 }
提示:後面我們將學習智能指針,這是非常重要的一個概念,將來越來越多的會拋棄指針。
小結:
string類最大程度的兼容了C字符串的用法。
數組訪問符的重載能夠使得對象模擬數組的行為
只能通過類的成員函數重載數組訪問符
重載函數能且僅能使用一個參數。
數組操作符重載