C++ 类外的Helper函数声明?

C++ 类外的Helper函数声明?,c++,C++,我读过一本书,书中说有一些函数叫做helper函数,它们通常在类之外声明,并且包含一些在程序中重复使用的功能 他们说==和!=是用于比较类的辅助函数类型 为什么他们被宣布为课外活动??我不明白???如果我理解正确,你说的是朋友函数。运算符==和运算符!=可以在类主体外部写入,其目的是重载==和!=类的运算符,以便在if/while等语句中比较它们。例如: class A { int size; public: A(int x) : size(x) {}; // declari

我读过一本书,书中说有一些函数叫做helper函数,它们通常在类之外声明,并且包含一些在程序中重复使用的功能

他们说==和!=是用于比较类的辅助函数类型


为什么他们被宣布为课外活动??我不明白???

如果我理解正确,你说的是朋友函数。运算符==和运算符!=可以在类主体外部写入,其目的是重载==和!=类的运算符,以便在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();
}
//简单函数从向量返回给定数字的平均值
整数平均值(常数std::vector&vec){
整数和=0;
用于(int i:vec)
总和+=i;
返回和/向量大小();
}

如果我没听错的话,你说的是友元函数。运算符==和运算符!=可以在类主体外部写入,其目的是重载==和!=类的运算符,以便在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();
}
//简单函数从向量返回给定数字的平均值
整数平均值(常数std::vector&vec){
整数和=0;
用于(int i:vec)
总和+=i;
返回和/向量大小();
}

如果将例如
操作符==
声明为成员函数,则类对象必须始终位于操作符的左侧。如果将例如
操作符==
声明为成员函数,则类对象必须始终位于操作符的左侧。