
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函数对下标进行有效性检查。 这个是什么意思 展开
在“[ ]”运算符重载函数中使用assert函数对下标进行有效性检查。 这个是什么意思 展开
推荐于2017-10-03 · 知道合伙人软件行家

知道合伙人软件行家
采纳数: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;
}
参考我的另一个相关回答:
展开全部
给个示例,以楼上代码为基础,再包含头文件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;
};
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;
};
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
};
{
public:
int& operator[](int k)
{
if (k == 1) return hour; else
if (k == 2) return minute; else
return second;
}
int hour, minute, second;
};
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询