You are on page 1of 2

#include <iostream>

using namespace std;

class Pers
{
private:
double salariu;
protected:
int marca;
public:
friend class MaiMic;
friend class Alfabetic;
string nume;
virtual double calcSal() { cout << "\ncalcSalPers"; return salariu; }
Pers(int m = 0, string n = "Noname", double s = 2000.)
: marca(m), nume(n), salariu(s)
{
cout << "\nCons Pers";
}
~Pers() {/* cout << "\nDestructor Pers";*/ }
friend ostream& operator<<(ostream& ost, Pers& p)
{
ost << p.marca << "\t" << p.nume << "\t" << p.salariu;
return ost;
}

};

class Comparator
{
public:
virtual bool operator()(Pers&, Pers&) = 0;
};

class MaiMic : public Comparator


{
public:
virtual bool operator()(Pers& a, Pers& b)
{
return a.salariu < b.salariu;
}
};
class Alfabetic : public Comparator
{
public:
virtual bool operator()(Pers& a, Pers& b)
{
return a.nume < b.nume;
}
};

void sort(Pers* vp, int n, Comparator& ord)


{
for(int i=0; i< n-1; i++)
for(int j=i+1; j<n; j++)
if (!ord(vp[i], vp[j]))
{
Pers aux = vp[i]; vp[i] = vp[j]; vp[j] = aux;
}
}

int main()
{
Pers p1(100, "Blanculescu Aurel", 3560.), p2, p3 = p1;
Pers vp[] =
{
Pers(100, "Sutasu Aurel", 10100.), Pers(400, "Patru Ioana",10400.),
Pers(300, "Traistaru T", 10300.)
};
int n = 3;
cout << "\nSort crescator";
MaiMic mm;
sort(vp, n, mm);
for (int i = 0; i < n; i++)
cout << "\n" << vp[i];

cout << "\nSort alfabetic";


Alfabetic alf;
sort(vp, n, alf);
for (int i = 0; i < n; i++)
cout << "\n" << vp[i];

You might also like