不出意外的话,这个要求应该永远也实现不了的。
因为重载的函数内没法知道传入的数组长度,要么就是外面定义死了。
http://www.cublog.cn/u3/94667/showart_2130191.html
不过参见规则8,重载要作用在用户自定义类型上,一般指结构体或者类。所以还是没办法。
解决办法有两种:
(1)定义结构体。
struct Array{
int size;//数据长度
int *a; //数据指针
};
然后再重载
bool operator< (const Array &a, const Array b)
(2)直接使用函数。
bool ArrayCmp(int *a, int n, int *b, int m)
n表示a的长度,m表示b的长度。
另外有个问题是,听你的描述好像是要知道:a里最大的数是否小于b里最小的数;不过看你的代码好像是在求:a和b数据长度相等,判断每个对应的位置上a是否都小于b。不知道你到底要实现的是哪个?
如果要实现前者的话,应该先把a里最大的数和b里最小的数求出来,再比较;后者的话,或者判断一下或者确保传进来的长度相等。
如果你需要第一个数组中的每一个元素都小于第二个数组中序号相同的元素,那么你的这个逻辑是正确的。如果你需要第一个数组中最大的元素小于第二个数组中最小的元素,那你的逻辑需要改改,先找出第一个数组中最大的元素,再找出第二个数组中最小的元素,然后进行比较。
如果你的意思是第一种,那你要检查下数组边界是否有问题
除此之外,暂时想不出来你还可能有哪些地方出错了……顺便,麻烦你问问题的时候说清楚一点,错误症状是什么,看代码就能看得出来的只有语法错误。
“<”的参数不允许两个都是指针。
可以这样:
#define m 3
class C
{
public:
int d[ m ];
};
bool operator<( const C& a, const C& b)
{
bool c=true;
for(int i=0;i
c=c&&(a.d[i]
return c;
}
//你的循环里面实际上只能对最后两个数据a[m-1]和b[m-1]进行比较
bool operator<( const int * &a,const int * &b)
{
bool c=true;
for(int i=0;i
c=c&&(a[i] if(c==false)break; //加入此句
}
return c;
}
那个for循环里面的m没有声明