C++怎样重载下标运算符 [ ]

请设计一个表示时间、简单但完整的Time类,它包含3个数据成员:hour, minute, second;要求在Time类中重载“[ ]”运算符,如果t是一个Time类的,则t[1]表示hour成员,t[2]表示munute成员,t[3]表示second成员,其他下标都是无效的;在“[ ]”运算符重载函数中使用assert函数对下标进行有效性检查。
在“[ ]”运算符重载函数中使用assert函数对下标进行有效性检查。 这个是什么意思

  重载运算[ ],在需要重载的类中声明 ClassName& operator [](int i)就可以了。


  参数i是代表传入的[ ]括号中的值(索引)。因为我们使用[ ]的使用会用到类似 a[i] = value的表达式去赋值,所以返回类的引用可以支持赋值操作。


  这里有我修改的一段示例代码

#include<iostream>
using namespace std;
 
class point {
private:
    int x, y;
public:
    static int count;
    point(int xx, int yy) :x(xx), y(yy) { count++; }
    point() { count++; }
};
 
class ArrPoint
{
private:
    int size;
    point* p;
 
public:
    ArrPoint(int s)
    {
        p = new point[s];
        size = s;
    }
    point& operator [](int i)
    {
        if(i >= size)
        {
            // è¶Šç•Œå¤„理
        }
        return p[i];
    }
};
 
int main()
{
    ArrPoint a(5);
    a[0], a[1], a[2], a[3], a[4];
 
 
    return 0;
}

  参考我的另一个相关回答:

  http://zhidao.baidu.com/question/2140469283194789788

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-11
给个示例,以楼上代码为基础,再包含头文件assert.h

class time
{
public:
int& operator[](int k)
{
assert( (0<= k) && (k<=100) );

if (k == 1) return hour; else
if (k == 2) return minute; else
return second;
}
int hour, minute, second;
};
第2个回答  推荐于2017-09-09
class time
{
public:
int& operator[](int k)
{
if (k == 1) return hour; else
if (k == 2) return minute; else
return second;
}
int hour, minute, second;
};本回答被提问者采纳
相似回答