2016-12-07 4 views
0

Я столкнулся с книгой, в которой говорится, что есть некоторые функции, называемые вспомогательными функциями, которые обычно объявляются вне класса и содержат некоторую функциональность, которая неоднократно используется в программе.Объявление вспомогательной функции вне класса?

Они сказали == и! = Типы вспомогательных функций, которые используются для сравнения классов.

Почему они объявлены вне класса? У меня нет идеи?

+4

Если вы заявляете, например, 'operator ==' как функция-член, то объект класса * всегда * должен находиться в левой части оператора. –

ответ

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(); 
} 
Смежные вопросы