Siema, mam do Was pytanko odnośnie przeciążania operatorów w C++. Mianowicie załóżmy, że mam strukturę jakichśtam obiektów. Niech to będzie struktura Punkt2D przechowująca dwie zmienne: zmienną X oraz Y kartezjańskiego układu współrzędnych. Mam je teraz posortować względem odległości od punktu S(0, 0), a gdy dwa punkty są jednakowo oddalone od punktu S, sortujemy względem zmiennej X rosnąco.
struct Punkt2D {
int X, Y;
double R;
};
No i wszystko gra, tylko, że do tej pory robiłem to tak (sortowanie):
- tworzyłem pomocniczą funkcję typu bool, która posłuży jako argument metody std::sort()
- wywoływałem metodę std::sort() z moją pomocniczą funkcją typu bool
Wygląda to mniej więcej tak:
#include <iostream>
#include <algorithm>
#define N 3
struct Punkt2D {
int X, Y, R;
// R - odleglosc od pkt S(0, 0)
};
bool cmp(Punkt2D &a, Punkt2D &b) {
if (a.R == b.R)
return (a.X < b.X);
return (a.R < b.R);
}
int main() {
Punkt2D tab[] = {{3, 4, 5},
{4, 3, 5},
{5, 12, 13}};
std::sort(tab, tab + N, cmp);
return 0;
}
Czasem jednak mam dosyć linii kodu, żeby się zgubić i mam pytanie: jak (bo wiem, że się jakoś da, tylko nie wiem jak) zrobić, żeby niejako nie trzeba było tworzyć funkcji cmp()? Wiem, że jakoś da się przeciążać operatory, ale chciałbym nauczyć się konkretnie na tym przykładzie, bo na internecie podają np. jak przeciążyć operator dodawania, tutaj to jest bezużyteczne.
Dzięki z góry za poświęcony czas i nadsyłane komentarze i odpowiedzi :D