Для сортировки шаблонного масива, нужно перегрузить оператор = для класса. В результате ошибка [BCC32 Error] File1.cpp(109): E2285 Could not find a match for 'operator Vector2D::=(const Vector2D)'.
Код:
#pragma hdrstop
#include <tchar.h>
#include <iostream.h>
#include <conio.h>
//---------------------------------------------------------------------------
#pragma argsused
//---------------------------------------------------------------------------
class Vector2D {
private:
double x;
double y;
public:
Vector2D():x(0), y(0) {}
Vector2D(double val):x(val), y(val) {}
Vector2D(double _x, double _y):x(_x), y(_y) {}
double GetX() const {return x;}
double GetY() const {return y;}
void SetX(double _x) {x = _x;}
void SetY(double _y) {y = _y;}
Vector2D operator=(const Vector2D &op2)
{
if (this == &op2) return *this;
x = op2.x;
y = op2.y;
return *this;
}
void operator+=(const Vector2D &op2)
{
x = x + op2.x;
y = y + op2.y;
}
bool operator<(const Vector2D &op2) const {
double len1 = sqrt(x*x + y*y);
double len2 = sqrt(op2.x*op2.x + op2.y*op2.y);
return (len1 < len2);
}
bool operator>(const Vector2D &op2) const {
double len1 = sqrt(x*x + y*y);
double len2 = sqrt(op2.x*op2.x + op2.y*op2.y);
return (len1 < len2);
}
friend ostream &operator<<(ostream &stream, const Vector2D &op2);
};
ostream &operator<<(ostream &stream, const Vector2D &op2) {
stream << "(" << op2.x << ", " << op2.y << ")";
return stream;
}
//---------------------------------------------------------------------------
template <class T, int MaxSize>
class Array {
T arr[MaxSize]; // масив
int size; // кількість елементів у масиві
public:
Array(): size(0) {};
Array(int n): size(n) {}; // виділяє пам'ять для масиву під n елементів
void push(T elem) // функція, яка додаватиме елемент у кінець масива
{
arr[size] = elem;
size++;
}
int GetSize() const {return size;}
T &operator[](int index) {return arr[index];}
T Sum() const // пошук суми
{
T sum(0);
for (int i=0; i<size; i++) sum += arr[i];
return sum;
}
T Max() const // максимальний елемент
{
int indexmax = 0;
for (int i=0; i<size; i++)
{
if ( arr[indexmax] < arr[i] ) indexmax = i;
}
return arr[indexmax];
}
T SortAscending() const
{
for (int i=0; i < size; i++)
for (int j=0; j < size; j++)
{
if (arr[i] > arr[j])
{
T tmp(0);
tmp = arr[i];
tmp=tmp;
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
void SortDescending() const
{
for (int i=0; i < size; i++)
for (int j=0; j < size; j++)
{
if (arr[i] < arr[j])
{
T tmp(0);
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
friend ostream &operator<<(ostream &stream, const Array &op2);
};
//---------------------------------------------------------------------------
int main()
{
const int SizeOfMass = 5;
int x, y;
cout << "Vvedit rozmirnist vectora:" <<endl;
Array<Vector2D, SizeOfMass> obj;
// додаєм елементи у вектор
for (int i=0; i<SizeOfMass; i++)
{
cout << "x:"; cin >> x;
cout << "y:"; cin >> y;
cout << endl;
obj.push( Vector2D(x, y) );
}
// виводим на екран
for (int i=0; i<obj.GetSize(); i++)
{
cout << obj[i] << endl;
}
cout <<"Max Elem: "<< obj.Max() << "\n";
cout << "Sum of Elems: " << obj.Sum() << "\n";
cout << "Sort ascending (press 1), or Sort descending (press 2)";
int value = 0;
cin >> value;
if (value == 1)
{
obj.SortAscending();
cout << "Sort ascending" << endl;
for (int i=0; i<obj.GetSize(); i++)
{
cout << obj[i] << endl;
}
}
if (value == 2)
{
obj.SortDescending();
cout << "Sort descending" << endl;
for (int i=0; i<obj.GetSize(); i++)
{
cout << obj[i] << endl;
}
}
_getch();
return 0;
}
//---------------------------------------------------------------------------