Что означает термин «свободная функция» в C ++? - PullRequest
81 голосов
/ 01 февраля 2011

Читая документацию для boost :: test, я натолкнулся на термин «свободная функция». Я понимаю, что свободная функция - это любая функция, которая ничего не возвращает (тип возвращаемого значения void). Но после прочтения кажется, что свободные функции также не принимают никаких аргументов. Но я не уверен. Это все мои предположения. Так кто-нибудь может определить свободную функцию?

Ответы [ 2 ]

95 голосов
/ 01 февраля 2011

Термин свободная функция в C ++ просто относится к функциям, не являющимся членами. Каждая функция, которая не является функцией-членом, является свободной функцией.

struct X {
    void f() {}               // not a free function
};
void g() {}                   // free function
int h(int, int) { return 1; } // also a free function
0 голосов
/ 30 декабря 2018

Позвольте мне показать очень простое использование бесплатной функции.

#include <iostream>

using namespace std;

template <typename T>
T Area ( T length, T breadth)
{
     cout<<length*breadth<<endl;
     return length*breadth;
}

Функция Площадь является функцией шаблона.Это не связано ни с одним классом и, следовательно, может вызываться как свободная функция.

class Square {
   private:
      int length;   // Length of a Square
      int breadth;  // Breadth of a Square
   public:
     Square(int l, int b): length(l), breadth(b){};
     int CalculateArea ()
     {
        return Area(length,breadth);
     }
};

Класс Квадрат имеет метод CalculateArea (), который вызывает функцию free Площадь

class Rectangle {
   private:
      double length;   // Length of a Rectangle
      double breadth;  // Breadth of a Rectangle
   public:
     Rectangle (double l, double b): length(l), breadth(b){};
     double CalculateArea ()
     {
        return Area(length,breadth);
     }
};

Класс Прямоугольник аналогичен Квадрат только типу данных длина и ширина различаются.

int main() {
   Square s(2,2); 
   Rectangle r(2.2,2.0);
   s.CalculateArea();
   r.CalculateArea();
   return 0;
}

вывод:

4

4.4

Функция Area является общей как для Square, так и для Rectangle.Без использования функции друга и члена можно вычислить площадь с помощью свободной функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...