【C++】34 数组操作符的重载

郝思文
• 阅读 340

【C++】34 数组操作符的重载

字符串类的兼容性

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

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

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

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

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
梦
4年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
Stella981 Stella981
3年前
Python 学生管理
原文链接: Python学生管理(https://my.oschina.net/ahaoboy/blog/1526102)python3练手 codingutf8学生类classStu:三个字段id字符串,name字符串,score小数def__init__(sel
Stella981 Stella981
3年前
C++中string类的正确写法
C的一个常见面试题是让你实现一个String类,限于时间,不可能要求具备std::string的功能,但至少要求能正确管理资源。具体来说:1.能像int类型那样定义变量,并且支持赋值、复制。2.能用作函数的参数类型及返回类型。3.能用作标准库容器的元素类型,即vector/list/deque的
Wesley13 Wesley13
3年前
C++ string类
http://blog.csdn.net/pipisorry/article/details/36869741(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fblog.csdn.net%2Fpipisorry%2Farticle%2Fdetails%2F36869741)使用标准
Wesley13 Wesley13
3年前
Java学习:字符串概述与特点
字符串概述与特点java.lang.String类代表字符串API当中说:Java程序中的所有字符串字面值(如“abc“)都作为此类的实例实现。其实就是说:程序当中所用的双引号字符串,都是String类的对象。(就算没有new,也照样是。)字符串的特点1.字符串的内容永远不可改变。【重点】
Wesley13 Wesley13
3年前
Java中的字符串的最大长度
Java中的字符串的最大长度看String的源码可以看出来,String实际存储数据的是charvalue\\,数组的长度是int类型,整数在java中是有限制的,我们通过源码来看看int类型对应的包装类Integer可以看到,其长度最大限制为2^311,那么说明了数组的长度是0~2^311,那么计算一下就是(2^31121474
Wesley13 Wesley13
3年前
7.3 C++字符串类
点击上方“C语言入门到精通”,选择置顶第一时间关注程序猿身边的故事!(https://oscimg.oschina.net/oscnet/1ce4cd34f99a492bb14e19b25bf89f49.png)作者闫小林白天搬砖,晚上做梦。我有故事,你有酒么?C字符串类
Wesley13 Wesley13
3年前
unity将 -u4E00 这种 编码 转汉字 方法
 unity中直接使用 JsonMapper.ToJson(对象),取到的字符串,里面汉字可能是\\u4E00类似这种其实也不用转,服务器会通过类似fastjson发序列化的方式,将json转对象,获取对象的值就是中文但是有时服务器要求将传参中字符串中类似\\u4E00这种转汉字,就需要下面 publ
Wesley13 Wesley13
3年前
JAVA字符串格式化
原文地址:https://blog.csdn.net/lonely\_fireworks/article/details/7962171常规类型的格式化String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处。format()方法有两种重载形式。