Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
CURSO: PROGRAMACION DE
COMPUTADORAS II
C++ nos permite sobrecargar la mayora de los operadores, para que sean
sensibles al contexto en el que se utilizan; el compilador genera el cdigo
apropiado con base en el contexto.
Figura 1.
Fundamentos de la sobrecarga de
operadores
La programacin en C++ es un proceso sensible y enfocado a los tipos. Los
programadores pueden usar los tipos fundamentales y definir nuevos tipos. Los
tipos fundamentales se pueden utilizar con la extensa coleccin de operadores
de C++.
Los programadores pueden usar operadores con tipos definidos por el usuario
tambin. Aunque C++ no permite crear nuevos operadores, s permite
sobrecargar la mayora de los operadores existentes para que, cuando stos se
utilicen con objetos, tengan un significado apropiado. sa es una poderosa
herramienta.
Fundamentos de la sobrecarga de
operadores
Para sobrecargar un operador, se escribe la definicin de una funcin miembro
no static o la definicin de una funcin global como se hace normalmente,
excepto que el nombre de la funcin se convierte ahora en la palabra clave
operator, seguida del smbolo del operador que se va a sobrecargar.
Para usar un operador en objetos de clases, ste debe sobrecargarse; hay tres
excepciones a esto. El operador de asignacin (=) se puede usar con cualquier
clase para realizar la asignacin a nivel de bits de los miembros de datos de la
clase; cada miembro de datos se asigna del objeto origen al objeto destino de
la asignacin.
Fundamentos de la sobrecarga de
operadores
Los operadores direccin (&) y coma (,) tambin pueden usarse con objetos de
cualquier clase sin sobrecargarse. El operador direccin devuelve la direccin
del objeto en memoria. El operador coma evala la expresin a su izquierda, y
despus la expresin a su derecha. Ambos operadores tambin se pueden
sobrecargar.
Figura 2.
Restricciones acerca de la sobrecarga de
operadores
La mayora de los operadores de C++ se pueden sobrecargar. stos se muestran
en la figura 2 y en la figura 3 se muestran los operadores que no se pueden
sobrecargar.
Figura 3.
Para los otros operadores, las funciones de sobrecarga de operadores pueden ser
clases miembro o funciones globales.
Las funciones de operadores como clase
miembro vs. funciones globales
Operadores como funciones miembro y funciones globales
Ya sea que una funcin de operador se implemente como funcin miembro o
como funcin global, el operador se sigue utilizando de la misma forma en las
expresiones. Entonces, cul implementacin es mejor? Cuando una funcin de
operador se implementa como funcin miembro, el operando de ms a la
izquierda (o el nico) debe ser un objeto de la clase del operador.
Para ser una funcin miembro, el operador << tendra que ser una clase
miembro ostream.
Esto no es posible para las clases definidas por el usuario, ya que no se nos
permite modifi car las clases de la Biblioteca estndar de C++.
Las funciones de operadores como clase
miembro vs. funciones globales
Por qu los operadores de insercin de flujo y de extraccin de flujo
sobrecargados se sobrecargan como funciones globales
De manera similar, el operador de extraccin de flujo sobrecargado (>>) se
utiliza en una expresin en la que el operando izquierdo tiene el tipo istream &,
como en cin >> objetoClase, y el operando derecho es un objeto de una clase
definida por el usuario, por lo que tambin debe ser una funcin global.
Por ejemplo, suponga que tenemos un objeto llamado nmero de tipo long int,
y un objeto llamado enteroGrande1 de la clase EnteroEnorme.
Por lo tanto, sobrecargamos el operador como una funcin global para permitir
que el EnteroEnorme aparezca del lado derecho de la suma.