C++学习笔记--数组操作符重载
来源:互联网 发布:live直播软件下载 编辑:程序博客网 时间:2024/05/20 03:45
首先问一下,在使用了string类后我们还能像在C中使用下标来操作数组的元素吗?当然可以啦,因为C++会最大限度的兼容C的用法,依然能够用下标操作单个字符。
看下面一个逆序字符串例子:
void reverseString(string &str) { int begin = 0; int end = str.length()-1; while(begin < end) { swap(str[begin++], str[end--]); }}函数在循环中不断的使用C++提供的交换函数实现串中首尾两个元素交换,还记得使用引用交换元素和使用指针交换的差异吗?前面可是讲解过的。这个例子说明了我们仍然可以引用下标来操作string对象的单个字符。
实现是实现了,但是想过为什么能够实现这种炫酷的操作,string定义的可是一个对象啊,答案肯定是有的,因为我们可以对数组访问操作符进行重载啊。
在进行重载之前需要知道一些准备知识,数组访问操作符是C/C++内置操作符,它的原生意义是数组访问和进行指针运算。
我们知道这样一个等价关系:
a[n] <--> *(a+n) <--> *(n+a) <--> n[a]
数组访问操作符只能通过成员函数进行重载,可以定义多个不同的重载函数但是成员函数只能使用一个参数。它重载后的意义就是能够使得对象能够模拟数组的行为。下面进行一个简单的重载:
class Test{ int a[5];public: int& operator [] (int i) { return a[i]; } 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; return 0;}定义一个类,有一个私有数组,重载数组访问操作符,重载函数有一个int变量,函数返回数组第i个元素。为什么重载函数返回类型是一个引用变量呢?由于想要模拟数组的操作的话能够给数组元素赋值是必不可少的,普通的返回类型并不能作为左值使用,只有使用引用才能接受数据赋值,因为引用就是一个变量的别名,指代了一片可以修改其内容的存储空间。
我们在学习C的时候能通过字符串作为索引获取数组元素吗?显然是不可能的,前面实现了对数组访问操作符的重载函数,使用了一个int型变量作为索引值使用,那么我们是不是可以将重载函数参数变成string类型呢?
int& operator [] (const string& s) { if( s == "111" ) { return a[0]; } else if( s == "222" ) { return a[1]; } return a[0]; }再次对数组访问操作符进行重载,通过字符串作为索引操作数组元素。
Test t1; t1["111"] = 100; cout << "t1[\"111\"] = " << t1["111"] << endl;
最后输出肯定是T1["111"] = 100了。这算不算是比较新鲜的东西了,在C语言中绝无仅有,并且不可能实现。
阅读全文
0 0
- C++学习笔记--数组操作符重载
- 操作符重载——C/C++学习笔记
- (C/C++学习笔记操作符重载入门)
- C++学习笔记:数组的操作符重载(包括[]和=运算符)
- C++学习笔记之操作符重载
- c++学习笔记(9.操作符重载)
- C++学习笔记9-操作符重载
- C++之操作符重载学习笔记
- C++学习笔记 操作符重载一
- C++之操作符重载学习笔记
- C++学习笔记--操作符重载
- (C/C++学习笔记)操作符重载的两种方法
- C++【操作符重载】
- c++::操作符重载
- C++:操作符重载
- C++重载[]数组操作符
- 数组的操作符重载
- 数组操作符的重载
- Android笔试和面试常见题目(三)
- Icecream PDF Split and Merge Pro(PDF分割合并工具)官方中文破解版V3.41下载
- 为什么用fopen打开远程URL会很慢?
- MTK Camera驱动移植
- JavaScript闭包学习笔记
- C++学习笔记--数组操作符重载
- 查询数据
- webpack实战——(4)处理项目中的资源文件
- Python Mysql:增删改查
- 使用反射机制创建万能的数据库的增删查改
- Oracle EBS Interface/API(4)--AR贷项通知单
- Android搜索框存储搜索记录
- 剑指offer---用两个栈实现队列(7)
- Leedcode 算法习题 第十一周