2012-05-16 16 views
8

È possibile sovraccaricare operatori (come operatori di confronto) in C?È possibile sovraccaricare gli operatori in C?

Se sì, come si fa? Ho fatto una rapida ricerca, ma tutto quello che ho trovato è stato per C++, e quello che voglio è per C.

Qualcuno ha qualche idea?

Edit1: L'idea è: ho una struttura e ho bisogno di fare un confronto (basato su un membro della struttura). E per questo vorrei associare gli operatori rispetto al mio nuovo "tipo di dati".

Edit2: Sono completamente consapevole che posso fare a meno dell'utilizzo dell'overloading dell'operatore, ma mi chiedevo se è possibile farlo con OVERLOAD.

Risposta: Il concetto di sovraccarico è associato alla programmazione orientata agli oggetti. Poiché C non è orientato agli oggetti e quindi non può contenere un concetto di sovraccarico. (:..

+1

Preferisco farlo in C: struct A; _Bool A_compare (const struct * A, const struct * A); – xis

+0

Lo so. Mi piacerebbe usare gli operatori, se fosse possibile. – Richard

+0

Se si desidera sovraccaricare l'operatore, è necessario passare a C++ –

risposta

18

No, non è possibile C non supporta l'overloading degli operatori

+0

Considerando in questo modo un operatore non è un tipo specifico di funzione? – Richard

+2

cosa intendi per funzioni di sovraccarico in C? C non supporta l'overloading delle funzioni. – xis

+1

@ xis19 No, non è così, mio ​​errore. Richard: In C++, gli operatori sono molto simili alle funzioni e definire operatori sovraccaricati viene eseguito esattamente nello stesso modo in cui si definiscono le funzioni. – meagar

5

Se per sovraccarico, si intende definiti dall'utente overload dell'operatore, allora la risposta è no, tuttavia, alcuni degli operatori predefinite come. *, + ecc sono sovraccarico (se ci pensate) per i tipi aritmetici. Il * è speciale in quanto ha anche un sovraccarico per i puntatori de-riferimento.

+0

Il multiplo * e il dereferenziamento * sono diversi. Penso che non siano sovraccarichi. – xis

+3

'*' non è poi così speciale. Ci sono due operatori separati, uno binario, l'altro unario, con lo stesso nome. Lo stesso accade con, ad esempio, '&'. In entrambi i casi, gli operatori unari e binari non sono correlati. –

+0

Sì, sono diversi. Questo è il motivo per cui ho detto che il '*' è speciale e non sovraccarico. – dirkgently

3

C non supporta l'overloading degli operatori o funzioni. Non è possibile ridefinire lo <, <=, >, >=, == o != per confrontare direttamente i tipi di struttura.

Problemi correlati