2012-05-16 9 views
8

¿Es posible sobrecargar operadores (como operadores de comparación) en C?¿Es posible sobrecargar a los operadores en C?

Si es así, ¿cómo lo hace? Hice una búsqueda rápida, pero todo lo que encontré fue para C++, y lo que quiero es para C.

¿Alguien tiene alguna idea?

Edit1: La idea es: Tengo una estructura, y tengo que hacer una comparación (basada en un miembro de la estructura). Y para esto, me gustaría asociar operadores en comparación con mi nuevo "tipo de datos".

Edit2: Estoy completamente consciente de que puedo hacerlo sin el uso de la sobrecarga del operador, pero me preguntaba si puede hacer esto CON SOBRECARGA.

Respuesta: El concepto de sobrecarga está asociado con la programación orientada a objetos. Como C no está orientado a objetos y, por lo tanto, no puede contener un concepto de sobrecarga. (:..

+1

Prefiero hacer esto en C: struct A; _Bool A_compare (const struct * A, const struct * A); – xis

+0

Lo sé. Me gustaría utilizar operadores, si fuera posible. – Richard

+0

Si desea sobrecargar al operador, deberá cambiar a C++ –

Respuesta

18

No, no es posible C no soporta la sobrecarga de operadores

+0

Considerando de esta manera que un operador no es un tipo específico de función? – Richard

+2

¿qué quiere decir con funciones de sobrecarga en C? C no admite la sobrecarga de funciones. – xis

+1

@ xis19 No, no, mi error. Richard: En C++, los operadores se parecen mucho a las funciones, y la definición de operadores sobrecargados se hace exactamente de la misma manera que se definen las funciones. – meagar

5

Si por sobrecarga, que quiere decir definidos por el usuario sobrecargas de operadores, entonces la respuesta es no obstante, algunos de los operadores predefinidos tales como. *, etc. + están sobrecargados (si se piensa en ello) para este tipo de aritmética. La * es especial, ya que también tiene una sobrecarga para los punteros-de referencia.

+0

Las múltiples * y la desreferencia * son diferentes. Creo que no están sobrecargados. – xis

+3

'*' no es realmente tan especial. Hay dos operadores separados, uno binario, el otro unario, con el mismo nombre. Lo mismo ocurre con, por ejemplo, '&'. En ambos casos, los operadores unarios y binarios no están relacionados. –

+0

Sí, son diferentes. Por eso dije que '' 'es especial y no está sobrecargado. – dirkgently

3

C no soporta la sobrecarga de operadores o funciones. No hay forma de que pueda redefinir <, <=, >, >=, ==, o != para comparar tipos de estructuras directamente.

Cuestiones relacionadas