C++运算符重载的问题
C++在重载运算符的时候什么要用const
今天遇到个例子。
class unit{public: void set_v1(int v); void set_v2(int v); int get_v1(); int get_v2(); unit():v1(0),v2(0){} friend ostream& operator <<(ostream& out,unit& unit); bool operator <(const unit& u) const;private: int v1; int v2;};#include <iostream>#include <cstdio>#include <cstdlib>#include <utility>#include <algorithm>#include <vector>#include <functional>/*http://blog.pfan.cn/wfxsky/28836.html当你的容器中元素时一些标准类型(int float char)或者string时,你可以直接使用这些函数模板。但如果你时自己定义的类型或者你需要按照其他方式排序,你可以有两种方法来达到效果:一种是自己写比较函数。另一种是重载类型的'<'操作赋。bool operator <(const unit& u) const;must overload as const*/using namespace std;class unit{public: void set_v1(int v); void set_v2(int v); int get_v1(); int get_v2(); unit():v1(0),v2(0){} friend ostream& operator <<(ostream& out,unit& unit); bool operator <(const unit& u) const;//重载<作为比较算子private: int v1; int v2;};void unit:: set_v1(int v){ v1 = v;}void unit:: set_v2(int v){ v2 = v;}int unit::get_v1(){ return v1;}int unit::get_v2(){ return v2;}bool unit:: operator<(const unit &u1) const{ return (v1<u1.v1);}ostream& operator <<(ostream& out,unit& unit){ out<<unit.v1<<" "<<unit.v2<<endl; return out;}bool less_compare(const unit& u1, const unit& u2){ return (u1.get_v1()<u2.get_v1());}int main(void){ vector<unit> units; srand(time(NULL)); int i = 10; while (--i>=0) { unit u; u.set_v1(rand()%100+1); u.set_v2(rand()%100+1); units.push_back(u); } vector<unit>:: iterator iter = units.begin(); while (iter!=units.end()) { cout<<*iter; iter++; } puts("after sort with overload <:"); sort(units.begin(),units.end()); iter = units.begin(); while (iter!=units.end()) { cout<<*iter; iter++; } puts("after sort with self function less_compare:"); sort(units.begin(),units.end(),less_compare); iter = units.begin(); while (iter!=units.end()) { cout<<*iter; iter++; } return 0;}bool less_compare(const unit& u1, const unit& u2){ return (u1.get_v1()<u2.get_v1());}bool less_compare(const unit& u1, const unit& u2){ return (u1.v1<u2.v1);}