C++学习笔记41——重载操作符之下标操作符

来源:互联网 发布:淘宝客教学视频 编辑:程序博客网 时间:2024/06/05 00:47

1,概述

(1)下标操作符operator[]必须定义为类的成员函数;
(2)下标操作符用在赋值操作符左右两边时,均应表现正常。故其应返回引用。
(3)一般应该定义const与非const两个版本,一个为非const成员,返回引用,另一个为const成员,返回const引用。
补充:
(1)可以基于输入参数是否为const而重载函数,
(2)const成员函数的隐藏输入参数this指针为const,普通成员函数的this非const,所以也可以基于成员函数是否为const而重载函数。
(3)const对象只能调用const成员函数,非const对象既能调用const成员函数也能调用非const成员函数,因为非const类型可以转化为const类型,但const类型不能转化为非const类型。
(4)在存在基于const的重载时,非const对象优先调用非const成员函数,因为不用做类型转化,为精确匹配。

2,示例

/*******************************************************************///   重载下标操作符/*******************************************************************/// 类的定义class Foo2{public:Foo2(vector<int> ivec) :data(ivec) {};int& operator[](const size_t index);const int& operator[](const size_t index) const;//3个constprivate:vector<int> data;};//成员函数的定义int& Foo2::operator[](const size_t index){cout << "call non_const []" << endl;return data[index];}const int& Foo2::operator[](const size_t index) const{cout << "call const []" << endl;return data[index];}//主函数int main(){vector<int> ivec = {1,2,3,4,5};Foo2 obj(ivec);const Foo2 con_obj(ivec);cout << obj[2] << endl;cout << con_obj[2] << endl;system("pause");return 0;}
输出结果:


0 0