Slide2.PNG

字符串类的兼容性

string类最大限度的考虑了C字符串的兼容性

可以按照使用C字符串的方式使用string对象

#include <string>
using namespace std;
int main()

{
     string s = "a1b2c3d4";
     int n = 0;
     for(int i = 0;i<s.length();i++)
     {
        if(isdigit(s[i]))
        {
            n++;
        }
     }
     cout << n <<endl;

    return 0;

}

输出:

4

重载数组访问操作符

数组访问符是C/C++中的内置操作符

数组访问符的原生意义是数组访问和指针运算

例:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    int a[5];
    for(int i=0;i<5;i++)
    {
        a[i] = i;
    }
    for(int i=0;i<5;i++)
    {
        cout << *(a + i) << endl;  //cout << a[i] << endl;
    }
    cout << endl;
    for(int i=0;i<5;i++)
    {
        i[a] = i+10; //a[i] = i+10;
    }
    for(int i=0;i<5;i++)
    {
        cout<<*(i+a)<<endl; //cout<< a[i]<<endl;
    }
    return 0;

}

输出:

0
1
2
3
4

10
11
12
13
14

重载数组访问操作符

数组访问操作符([])

只能通过类的成员函数重载

重载函数能且仅能使用一个参数

可以定义不同参数的多个重载函数

例:

#include <iostream>

#include <string>



using namespace std;


class Test
{
int a[5];
public:
 int& operator[](int i)
 {
   return a[i];
 }
 int& operator[](const string& s)
 {
   if(s == "1st")
   {
    return a[0];
   }
   else if(s == "2nd")
   {
     return a[1];
   }
   else if(s == "3td")
   {
     return a[2];
   }
     else if(s == "4td")
   {
     return a[3];
   }
     else if(s == "5td")
   {
     return a[4];
   }
   
   return a[0];
 }
  int length()
  {
    return 5;
  }
};

int main()

{
    Test t;
    for(int i=0;i<t.length();i++)
    {
     t[i]=i;
    }
    for(int i=0;i<t.length();i++)
    {
     cout << t[i] << endl;
    }
    cout << t["1st"] << endl;
    cout << t["2nd"] << endl;
    cout << t["3td"] << endl;
    cout << t["4td"] << endl;
    cout << t["5td"] << endl;

    return 0;

}

输出:

0
1
2
3
4
0
1
2
3
4

小结:

string类最大程度的兼容了C字符串的用法

数组访问符的重载能够使得对象模拟数组的行为

只能通过类的成员函数重载数组访问符

重载函数能且仅能使用一个参数


YingLi
6 声望4 粉丝

From zero to hero.