#include <iostream> using namespace std; template<class T> bool increSort(T &a, T &b) { return (a > b); } template<class T> bool decreSort(T &a, T &b) { return (a < b); } template<class T> void Sort(T* array, int len, bool(*compare)(T&, T&)) { T temp; for (int i = 0; i < len - 1; i++) { for (int j = len - 1; j > i; j--) { if (compare(array[j-1], array[j])) { temp = array[j]; array[j] = array[j - 1]; array[j - 1] = temp; } } } } template<class T> class Rec { public: Rec(T a = 0, T b = 0) :length(a), width(b) {} T Area() { return length * width; } private: T length; T width; }; template<class T> bool operator > (Rec<T> & a, Rec<T> &b) { return (a.Area() > b.Area()); } template<class T> bool operator < (Rec<T> & a, Rec<T> &b) { return (a.Area() < b.Area()); } int main() { Rec<double> a[] = { Rec<double>(1.1, 5.2), Rec<double>(3.3, 7.8), Rec<double>(4.4,2.8), Rec<double>(6.1,1.5) }; int size = sizeof(a) / sizeof(Rec<double>); cout << "size is " << size << endl; Sort(a, size, increSort); for (int i = 0; i < size; i++) { cout << a[i].Area() << endl; } int i; cin >> i; return 0; }