21、不一样的C++系列--数组操作符的重载
来源:互联网 发布:国际顶级域名数据库 编辑:程序博客网 时间:2024/05/17 02:36
字符串类的兼容性
存在的一些历史遗留问题
- C语言不支持真正意义上的字符串
- C语言用字符数组和一组函数实现字符串操作
- C语言不支持自定义类型,因为无法获取字符串类型
- C++语言直接支持C语言的所有概念
- C++语言中没有原生的字符串类型
C++标准提供了字符串类(string类)
- string直接支持字符串连接
- string直接支持字符串的大小比较
- string直接支持子串查找和提取
- string直接支持字符串的插入和替换
string类最大限度的考虑了C字符串的兼容性
- 可以按照使用C字符串的方式使用string对象
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++) { 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;}
- 这里一定要清楚:
- 数组访问符是C/C++中的内置操作符
- 数组访问符的原生意义是
数组访问
和指针运算
重载数组访问操作符
- 数组访问操作符([])
- 只能通过类的成员函数重载
- 重载函数能且仅能使用一个参数
- 可以定义不同参数的多个重载函数
这里举个栗子:
#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 == "3rd" ) { 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["3rd"] << endl; cout << t["2nd"] << endl; cout << t["1st"] << endl; return 0;}
小结
- string类最大程度的兼容了C字符串的用法
- 数组访问符的重载能够使得对象模拟数组的行为
- 只能通过类的成员函数重载数组访问符
- 重载函数能且仅能使用一个参数
阅读全文
0 0
- 21、不一样的C++系列--数组操作符的重载
- 20、不一样的C++系列--操作符重载
- 22、不一样的C++系列--函数调用操作符的重载
- 5、不一样的C++系列--函数重载
- 数组的操作符重载
- 数组操作符的重载
- 34-数组操作符[]的重载
- 34、不一样的C++系列--数组类模板
- c++string类的操作符重载
- 1、不一样的C++系列--C到C++的升级
- 37、不一样的C++系列--C语言异常处理
- 操作符的重载以及数组/vector对象的初始化
- 不一样的C语言-当sizeof遇上数组名
- 操作符重载的应用(数组类)
- 操作符的重载
- 操作符的重载
- 操作符的重载
- 操作符的重载
- 每天一个Linux命令(38):cal命令
- Python基础——数据类型与变量
- 嵌入式linux用xdelta实现程序的远程升级
- Sketch Tutorial
- 搭建邮件服务器之SMTP发送服务器(二)
- 21、不一样的C++系列--数组操作符的重载
- 使用cookie实现记住用户名的功能
- 每天一个Linux命令(39):grep命令
- web.xml详解
- 直播系统如何设置多码率输出
- FlytestingToolkit工具派送,懒人的测试思考
- Android之添加第三方下拉刷新PullToRefresh操作
- Linux shell 中的快捷键
- 小米日历详解