1. 程式人生 > >數組操作符重載

數組操作符重載

運算 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字符串的用法。

  數組訪問符的重載能夠使得對象模擬數組的行為

  只能通過類的成員函數重載數組訪問符

  重載函數能且僅能使用一個參數。

數組操作符重載