Если я правильно понял, вы говорите о функциях друга. Оператор == и оператор! = Могут быть записаны вне тела класса, и их назначение перегружает == и! = Операторы для вашего класса, чтобы вы могли сравнить их в if/while и т. Д. Операторах. Например:
class A {
int size;
public:
A(int x) : size(x) {};
// declaring that this operator can access private methods and variables of class A
friend operator==(const A&, int);
friend operator==(const A&, const A&);
}
// overloaded operator for comapring classes with int
bool operator==(const A& lside, int rside) {
return lside.size == rside;
}
// second overload for comapring structure two classes
bool operator==(const A& lside, const A& rside) {
return lside == rside.size; // we can also use first operator
}
int main() {
A obj(5);
if (A == 5) { ... } // TRUE
if (A == 12) { ... } // FALSE
}
Если это не то, что вы имели в виду, чем там также может быть классическая функция, не являющееся членом, который может использовать любой класс. Это могло бы, как вы сказали, быть полезным для функций, которые используются во многих частях вашей программы, не привязанных к какому-либо определенному классу. Например:
// simple function returnig average of given numbers from vector
int average(const std::vector<int>& vec) {
int sum = 0;
for (int i : vec)
sum += i;
return sum/vec.size();
}
Если вы заявляете, например, 'operator ==' как функция-член, то объект класса * всегда * должен находиться в левой части оператора. –