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