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

请设计一个表示时间、简单但完整的Time类,它包含3个数据成员:hour,minute,second;要求在Time类中重载“[]”运算符,如果t是一个Time类的,则t... 请设计一个表示时间、简单但完整的Time类,它包含3个数据成员:hour, minute, second;要求在Time类中重载“[ ]”运算符,如果t是一个Time类的,则t[1]表示hour成员,t[2]表示munute成员,t[3]表示second成员,其他下标都是无效的;在“[ ]”运算符重载函数中使用assert函数对下标进行有效性检查。
在“[ ]”运算符重载函数中使用assert函数对下标进行有效性检查。 这个是什么意思
展开
 我来答
gongxinheng
推荐于2017-10-03 · 知道合伙人软件行家
gongxinheng
知道合伙人软件行家
采纳数:55 获赞数:380
6年游戏开发经验。曾在多个MMO PC游戏以及手游项目担任主程。 目前在美国华盛顿州立大学留学并参与研究项目

向TA提问 私信TA
展开全部

  重载运算[ ],在需要重载的类中声明 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

上上西
2010-09-11 · TA获得超过346个赞
知道小有建树答主
回答量:386
采纳率:0%
帮助的人:0
展开全部
给个示例,以楼上代码为基础,再包含头文件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;
};
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
goose_in_cloud
推荐于2017-09-09 · TA获得超过132个赞
知道答主
回答量:76
采纳率:0%
帮助的人:87.4万
展开全部
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;
};
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式