sábado, 9 de enero de 2016

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