课堂外的助手功能声明?

时间:2016-12-07 09:21:35

标签: c++

我遇到了一本书,其中指出有一些称为辅助函数的函数通常在类外声明,并包含一些在程序中重复使用的函数。

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

为什么他们在课外宣布?我不明白吗?

1 个答案:

答案 0 :(得分:2)

如果我理解你,你就是在谈论朋友的功能。运算符==和运算符!=可以写在类主体之外,它们的目的是为类重载==和!=运算符,以便在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();
}