14.3 算術操作符和關系操作符
一般而言,將算術和關系操作符定義為非成員函數。
為了與內置操作符保持一致,加法返回一個右值,而不是一個引用。
friend Class1 operator+(const Class1 &c1, const Class1 &c2);
Class1 operator+(const Class1 &c1, const Class1 &c2)
{
Class1 c(100);
c.counter = c1.counter+c2.counter;
return c;
}
Class1 c1(200);
Class1 c2(300);
cout << c1 + c2 << endl;
既定義了算術操作符又定義了相關復合賦值操作符的類,一般應使用復合賦值實現算術操作符。
14.3.1 相等操作符
friend bool operator==(const Class1 &c1, const Class1 &c2);
inline bool operator==(const Class1 &c1, const Class1 &c2)
{
return c1.counter == c2.counter;
}
Class1 c1(200);
Class1 c2(300);
bool i = c1 == c2;
cout << i << endl;
定義了operator==的類更容易與標准庫一起使用。有些算法,如find,默認使用==操作符,如果類定義了==,則這些算法可以無需任何特殊處理而用於該類類型。
14.3.2 關系操作符
關聯容器以及某些算法,使用默認<操作符。一般而言,關系操作符,諸如相等操作符,應定義為非成員函數。
摘自 xufei96的專欄