Что означает термин «свободная функция» в C ++?

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

c++
75 голосов | спросил Jame 1 FebruaryEurope/MoscowbTue, 01 Feb 2011 14:23:50 +0300000000pmTue, 01 Feb 2011 14:23:50 +030011 2011, 14:23:50

2 ответа


0

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

struct X {
    void f() {}               // not a free function
};
void g() {}                   // free function
int h(int, int) { return 1; } // also a free function
ответил Georg Fritzsche 1 FebruaryEurope/MoscowbTue, 01 Feb 2011 16:46:22 +0300000000pmTue, 01 Feb 2011 16:46:22 +030011 2011, 16:46:22
0

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

#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);
     }
};

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

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. Без использования функции «друг» и «член» можно вычислить площадь с помощью свободной функции.

ответил A Santosh 30 SunEurope/Moscow2018-12-30T14:21:54+03:00Europe/Moscow12bEurope/MoscowSun, 30 Dec 2018 14:21:54 +0300 2018, 14:21:54

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132