前言
关于在结构体中重载运算法这个问题,起初个人也不算太理解,在浏览许多博文之后发现每个人的解释都不大一样。思考许久之后,决定写一下自己的见解。如果差错,欢迎各位指出。
正题
首先,我们看一个结构体person。
struct person
{
double height;
double weight;
double age;
}p[20];
不难看出,在结构体person中,我们定义了三个double变量:height,weight,age。我们就用这个结构体来表示人的一些属性。
person 小明,小刚; //定义出来两个人
看完结构体后,再来看三个表达式:
前两个数学表达式在我们看来,十分容易理解。
那么第三个表达式要怎么理解呢?小明的身高小于小刚?小明的体重小于小刚?小明的年龄小于小刚?
因为小明与小刚是人,在我们所熟知的世界中,并没有直接拿两个人直接比较的,比较的只是两个人的某种属性。
那么我们就以年龄为标准,用sort来对peron这个结构体进行排序。
sort(first_pointer,first_pointer+n,cmp);
冷静!sort函数里好像并不能满足我们的意思。那要怎么解决呢?对了,重载!
重载
结合我们的第二幅图,我们就可以通过重载 ‘<’ 让结构体在使用 ‘<’ 进行排序的时候直接找到他要走的那条路。那么我们就可以在结构体重加入重载<的一个函数:
struct person
{
double height;
double weight;
double age;
bool operator<(const person &x) const
{
return age < x.age;
}
}p[20];
此处内容,个人理解,可能会有错误,但是可以帮助你理解这个重载函数:
首先看重载函数是bool类型,那么只有true或false两种取值,当 age < x.age 为true时,函数的返回值也是true。反之为false。(此处的age == this.age)
此时根据重载,用sort(p,p+20)就可以直接排序了,因为这个时候根据图二,我们可以知道 < 直接重载,可以根据person的age属性来进行比较了。
如果把重载函数中的小于号换成大于号
bool operator<(const person &x) const
{
return age > x.age;
}
那么我们是不是就可以认为,此时的 ‘>’ 和 '<'翻转了,大于是小于,小于才是大于。
这个时候,就相当于我们把原来的顺序给逆序了。