2012-05-16 26 views
8

Czy możliwe jest przeciążenie operatorów (np. Operatorów porównania) w C?Czy możliwe jest przeciążenie operatorów w C?

Jeśli tak, jak to zrobić? Zrobiłem szybkie wyszukiwanie, ale wszystko, co znalazłem, było dla C++, a czego chcę dla C.

Ktoś ma jakieś pomysły?

Edit1: Pomysł brzmi: Mam strukturę i muszę wykonać porównanie (na podstawie elementu struktury). I do tego chciałbym skojarzyć operatorów w porównaniu do mojego nowego "typu danych".

Edycja2: Jestem całkowicie świadomy, że mogę zrobić bez użycia przeciążenia operatora, ale zastanawiałem się, czy możesz to zrobić Z PRZECIĄŻENIEM.

Odpowiedź: Pojęcie przeciążenia związane jest z programowaniem obiektowym. Ponieważ C nie jest zorientowany obiektowo i dlatego nie może zawierać koncepcji przeciążenia. (..

+1

Wolę to zrobić w C: struct A; _Bool A_compare (const struct * A, const struct * A); – xis

+0

Wiem. Chciałbym skorzystać z operatorów, jeśli to możliwe. – Richard

+0

Jeśli chcesz przeciążać operatora, musisz przejść na C++ –

Odpowiedz

18

Nie, to nie jest możliwe, C nie obsługuje przeciążanie operatorów

+0

Biorąc pod uwagę w ten sposób operator nie jest specyficznym rodzajem funkcji? – Richard

+2

co masz na myśli przez funkcje przeciążeniowe w C? C nie obsługuje przeciążania funkcji. – xis

+1

@ xis19 Nie, nie, mój błąd. Richard: W C++ operatory są bardzo podobne do funkcji, a definiowanie przeciążonych operatorów odbywa się dokładnie tak samo, jak definiuje się funkcje. – meagar

5

przypadku przeciążenia, to znaczy, zdefiniowane przez użytkownika przeciążenia operatora, to odpowiedź nie jest jednak niektóre z predefiniowanych operatorów, takich jak. *, + itp są przeciążone (jeśli myślisz o tym) dla typów arytmetycznych. * jest wyjątkowy, ponieważ ma również przeciążenie dla de-przedstawieniu wskaźników.

+0

Wiele * i dereferencja * są różne. Myślę, że nie są przeciążone. – xis

+3

'' 'nie jest wcale tak wyjątkowy. Istnieją dwa oddzielne operatory, jeden binarny, drugi unarny, o tej samej nazwie. To samo dzieje się na przykład z '&'. W obu przypadkach operatory jednoargumentowe i binarne nie są ze sobą powiązane. –

+0

Tak, są różne. Dlatego powiedziałem, że '*' jest wyjątkowy i nie jest przeciążony. – dirkgently

3

C nie obsługuje przeciążania operatorów lub funkcji. Nie ma możliwości ponownego zdefiniowania <, <=, >, >=, == lub !=, aby bezpośrednio porównać typy struct.

Powiązane problemy