Fundamentos de la
sobrecarga de operadores
La programación en C++ es sensible a los tipos y a los
procesos que se enfocan en ellos. Los programadores pueden utilizar tipos
integrados y pueden definir nuevos tipos. Los tipos integrados pueden utilizarse
con la rica colección de operadores de C++. Los operadores proporcionan a los
programadores una notación concisa para expresar manipulaciones a objetos de
tipos integrados.
Los programadores también pueden utilizar operadores con
tipos definidos por el usuario. Aunque C++ no permite la creación de nuevos
operadores, sí permite que la mayoría de los operadores existentes se sobrecarguen para que cuando se utilicen con
objetos clase, los operadores tengan un significado apropiado para los nuevos
tipos.
La sobrecarga de operadores contribuye a la extensibilidad
de C++, uno de los atributos más atractivos del lenguaje.
Utilice la sobre de operadores, cuando ésta haga que los programas sean más
claros que si utilizara llamadas explícitas a funciones para realizar las
mismas operaciones.
Aunque la sobrecarga de operadores puede sonar como una
capacidad exótica, la mayoría de los programadores con frecuencia utilizan
implícitamente operadores sobrecargados. Los operadores se sobrecargan
escribiendo una definición de función
(con un encabezado y un cuerpo) como normalmente lo haría, con la excepción de
que el nombre de la función ahora se convierte en la palabra reservada operator, seguida por el símbolo del
operador que se está sobrecargado. Por ejemplo, el nombre de la función operator+ se utilizaría para sobrecargar el operador
suma (+).
Para utilizar un operador sobre clases de objetos, ese
operador debe sobrecargarse (existen dos excepciones) El operador de asignación
(=) puede utilizarse con todas las clases, sin una sobrecarga explícita. El
comportamiento predeterminad del operador de asignación predeterminada de
miembros es peligrosa para las clases. Pronto veremos que dicha asignación
predeterminada de miembros es peligrosa para las clases con miembros
apuntadores; explícitamente sobrecargaremos el operador de asignación para
dichas clases. El operador de dirección (&) también puede utilizarse con
objetos de cualquier clase sin tener que sobrecargarlos; éste simplemente
devuelve la dirección del objeto en memoria. El operador de dirección también
puede sobrecargarse.
La sobrecarga es más adecuada para clases matemáticas. Éstas
con frecuencia requieren de un conjunto completo de operadores sobrecargados,
para garantizar la consistencia con la forma en que se manejan realmente esas
clases matemáticas.
El propósito de la sobrecarga de operadores es proporcionar
las mismas expresiones concisas para tipos definidos por el usuario, que C++
proporciona en su rica colección de operadores para tipos integraos, Sin
embargo, la soobrecarga de operadores no es automática; el programador debe
escribir funciones para la sobrecarga de operedadores, de tal modo que
realicen operaciones deseadas. Algunas veces, estas funciones se realizan
mejor con funciones miembro; en
ocasiones, son mejores como funciones friend
y en otras, pueden hacerse con funciones no miembro y no friend.
Es posible abusar en extremo de la sobrecarga, como el caso
del operador +, para realizar operaciones de tipo sustracción, o como en el
caso del operador /, para realizar operaciones de tipo multiplicación. Tales
usos de la sobrecarga hacen que un programa se extremadamente difícil de
entender.
Al menos un argumento de una función operador debe ser un
objeto de clase o una referencia a un objeto de clase. Esto evita que los
programadores modifiquen la forma en que los operadores funcionan con tipos
integrados.
Sobrecargar un operador de asignación y un operador de suma
para permitir instrucciones como: objeto2 = objeto2 + objeto 1; no
implica que el operador += también
se sobrecargue para permitir funciones como: objeto 2 += objeto1; Tal comportamiento puede lograrse
sobrecargando explícitamente el operador += para esa clase.
Ejemplo de sobrecarga de operadores
No hay comentarios:
Publicar un comentario