加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C++深度解析 数组操作符的重载 --- 数组访问操作符[ ],(33)

发布时间:2020-12-15 04:46:56 所属栏目:百科 来源:网络整理
导读:C++深度解析 数组操作符的重载(33) 通过数组访问操作符,访问单个字符。 示例程序: #include #include using namespace std; int main() { string s = "a1b2c3d4e"; int n = 0; for (int i = 0; i { //判断字符是否为数字 if (isdigit(s[i])) { n++; } }

C++深度解析 数组操作符的重载(33)

通过数组访问操作符,访问单个字符。

示例程序:

#include

#include

using namespace std;

int main()

{

string s = "a1b2c3d4e";

int n = 0;

for (int i = 0; i < s.length(); i++)

{

//判断字符是否为数字

if (isdigit(s[i]))

{

n++;

}

}

cout << n << endl;

return 0;

}

结果如下:

类的对象怎么支持数组的下表访问。

数组访问操作符和任意类对象共同使用。

数组访问操作符

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

a[n] ?<<==>> ?*(a+n) ?<<==>> ?*(n+a) ?<<==>>n[a]

示例程序:(指针与数组的复习)

#include

#include

using namespace std;

int main()

{

int a[5] = {0};

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++)

{

//a[i] = i + 10;

i[a] = i + 10; // 等价于:*(i + a) ==> *(a + i) ==> a[i]

}

for(int i = 0; i < 5; i++)

{

cout << *(i + a) << endl; //等价于:cout << a[i] << endl;

}

return 0;

}

结果如下:

分析:数组访问操作符[ ],原生的意义是访问数组的某个元素,深层次的含义就是计算地址的偏移量。

重载数组访问操作符

数组访问操作符([ ])

示例程序:(重载数组访问操作符)

#include

#include

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 == "3th")

{

return a[2];

}

else if(s == "4th")

{

return a[3];

}

else if(s == "5th")

{

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["5th"] << endl;

cout << t["4th"] << endl;

cout << t["3th"] << endl;

cout << t["2nd"] << endl;

cout << t["1st"] << endl;

return 0;

}

结果如下:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读