SlideShare una empresa de Scribd logo
Ing Gerardo García Gil   SOBRE CARGA DE OPERADORES

Como aprendió, el tipo de un a variable indica el conjunto de valores que esta pueda guardar, así
como el conjunto de operaciones que usted puede hacer con ella. Por ejemplo, con una variable de
tipo int el programa puede sumar, restar, multiplicar y dividir valores. En una cadena de caracteres,
por otra parte, no tiene sentido utilizar el operador de adición para sumar dos cadenas. Cuando
usted define una clase dentro de un programa, en esencia se define un tipo nuevo. Por tanto C++ le
permite especificar las operaciones que le corresponden a ese tipo. La sobrecarga de operadores es
el proceso de cambiar el significado de un operador (digamos de adición,+, que C++ utiliza
generalmente para hacer sumas) para que lo use una clase especifica. En esta sección definiremos
una clase llamada cadena y sobrecargaremos los operadores de la adición y sustracción. Para los
objetos de la cadena, el operador de la adición añadirá letras específicas al contenido actual de una
cadena. De modo similar, el operador de sustracción quitara cada aparición de una letra específica
de la cadena. Cuando termine esta lección comprenderá los siguientes conceptos clave:



         Usted sobrecarga operadores para mejorar la legibilidad de los programas. Debe
          sobrecargar un operador cuando, al hacerlo, sea más fácil de entender un programa.

         Los programas de C++ usan la palabra reservada operator para sobrecarga de un operador

         Cuando usted sobrecarga un operador, especifica una función que C++ invoca cada vez que
          la clase usa un operador sobrecargado. La función, a su vez, ejecuta las operaciones
          correspondientes.

         Cuando un programa sobrecarga un operador para una clase específica, el significado del
          operador cambia solo para esa clase; el resto del programa continua usándolo para que
          ejecute sus operaciones ordinarias.

         C++ permite a los programas sobrecargar casi todos los operadores; sin embargo, hay
          cuatro que no se pueden sobrecargar.



          SOBRECARGA DE LOS OPERADORES DE ADICIÓN Y SUSTRACCIÓN.
          Cuando usted sobrecarga un operador para una clase, la función de aquel no cambia para
          otros tipos de variables. Por ejemplo, si sobrecarga el operador de adicción para la clase
          cadena , su función no cambia cuando usted tenga que sumar dos números. Cuando el
          compilador de C++ encuentra el operador dentro del programa, determina que operación
          debe de hacer con base en el tipo de las variables correspondientes. La siguiente definición
          de la clase crea una clase llamada cadena, que contiene un miembro de datos, el cual es la
          cadena de caracteres en sí. La cadena contiene varios métodos y no define operador
          alguno:
Ing Gerardo García Gil   SOBRE CARGA DE OPERADORES

PRACTICA 7.1

#include "stdafx.h"
#include <string.h>
#include <iostream>
using namespace std;

class cadena
{
public:
      cadena(char *);
      void sumar_letras(char *);
      void quitar_letras(char);
      void ver_cadena();
private:
      char datos[256];
};
cadena::cadena(char *str)
{
      strcpy(datos,str);
}

void cadena::sumar_letras (char *str)
{
strcat(datos,str);
}
void cadena::quitar_letras(char letra)
{
      char temp[256];
      int i,j;

      for(i=0,j=0;datos[i];i++)
      {
            if(datos[i]!=letra)
            temp[j++]=datos[i];
            temp[j]=NULL;
      }
      strcpy(datos,temp);
}
      void cadena::ver_cadena()
      {
            cout<<datos<<endl;
      }

int _tmain(int argc, _TCHAR* argv[])
{
      cadena titulo("c++ al rescate");
      cadena leccion("sobrecarga de operadores");

      titulo.ver_cadena ();
      titulo.sumar_letras (" al rescate!");
      titulo.ver_cadena();

      leccion.ver_cadena ();
      leccion.quitar_letras ('e');
      leccion.ver_cadena();

      return 0;
}
Ing Gerardo García Gil   SOBRE CARGA DE OPERADORES

Como puede ver, el programa emplea la función sumar_letras para agregar caracteres a la cadena
variable titulo. Además, utiliza las funciones quitar_letras para eliminar cada aparición de la letra e
de la cadena de caracteres lección. En este ejemplo usa llamadas a función para hacer tales
operaciones. Utilizando la sobrecarga de operadores sin embargo, el problema puede hacer
operaciones idénticas mediante los operadores de adición (+)y sustracción (-).

Cuando usted sobrecarga un operador, utiliza la palabra clave operator de C++ dentro del prototipo
y definición de la función para indicar al compilador de C++ que la clase ocupará este método como
operador. La siguiente definición de clase; por ejemplo utiliza la palabra operator para asignar
operadores de adición y sustracción a las funciones sumar_letras y quitar_letras. Dentro de la
clase cadena:

PRACTICA 7.2

#include "stdafx.h"
#include <string.h>
#include <iostream>

using namespace std;

class cadena
{
public:
      cadena(char *);
      void operator +(char *);
      void operator -(char);
      void ver_cadena();
private:
      char datos[256];
};

cadena::cadena(char *str)
{
      strcpy(datos,str);
}

void cadena::operator +(char *str)
{
strcat(datos,str);
}

void cadena::operator -(char letra)
{
      char temp[256];
      int i,j;

        for(i=0,j=0;datos[i];i++)
        {
              if(datos[i]!=letra)
              temp[j++]=datos[i];

                temp[j]=NULL;
                strcpy(datos,temp);

        }
Ing Gerardo García Gil   SOBRE CARGA DE OPERADORES


}

         void cadena::ver_cadena()
         {
               cout<<datos<<endl;
     }

int _tmain(int argc, _TCHAR* argv[])
{
      cadena titulo("c++ al rescate");
      cadena leccion("sobrecarga de operadores");

         titulo.ver_cadena ();
         titulo + " al rescate!";
         titulo.ver_cadena();

         leccion.ver_cadena ();
         leccion - 'e';
         leccion.ver_cadena();


         return 0;
}

Cuando usted crea sus propios tipos de datos utilizando clases, la operación común que hará es
revisar si dos objetos son iguales. Mediante la sobrecarga de operadores, los programas pueden
sobrecargar los operadores relacionales de igualdad (==), desigualdad(!=)u otros. El siguiente
programa, añade el operador sobrecargado, los programas pueden probar si dos cadenas contienen
lo mismo.

PRACTICA 7.3

#include "stdafx.h"
#include <string.h>
#include <iostream>

using namespace std;

class cadena
{
public:
      cadena(char *);
      char *operator +(char *);
      char *operator -(char);
      int operator==(cadena);
      void ver_cadena();
private:
      char datos[256];
};

cadena::cadena(char *str)
{
      strcpy(datos,str);
}
Ing Gerardo García Gil   SOBRE CARGA DE OPERADORES

char *cadena::operator +(char *str)
{
return(strcat(datos,str));
}

char *cadena::operator -(char letra)
{
      char temp[256];
      int i,j;

        for(i=0,j=0;datos[i];i++)
        {
              //¿es la letra que se va a eliminar?
              if(datos[i]!=letra)
                    // si no asignarla a temp
              temp[j++]=datos[i];

             temp[j]=NULL;

             //copia el contenido de temp otra vez a datos


        }
        return(strcpy(datos,temp));
}

int cadena::operator ==(cadena cade)
{
      int i;

        for(i=0;datos[i]==cade.datos[i];i++)
              if((datos[i]==NULL)&&(cade.datos[i]==NULL))
                    return(1);
        return(0);

}

        void cadena::ver_cadena()
        {
              cout<<datos<<endl;
    }


int _tmain(int argc, _TCHAR* argv[])
{
      cadena titulo("c++ al rescate");
      cadena leccion("sobrecarga de operadores");
      cadena cade("c++ al rescate");

        if(titulo==leccion)
              cout<<"titulo y leccion son iguales"<<endl;
        if(cade==leccion)
              cout<<"str y leccion son iguales"<<endl;
        if(titulo==cade)
              cout<<"titulo y str son iguales"<<endl;


        return 0;
}
Ing Gerardo García Gil   SOBRE CARGA DE OPERADORES


OPERADORES QUE NO PUEDEN SOBRECARGARSE.
OPERADOR     PROPÓSITO                                                   EJEMPLO
             Operador miembro de clase                                   Objeto.miembro
.
             Apuntador a un operador miembro                             Objeto.*miembro
.*
             Operador de resolución de alcance global                    Nombreclase::miembro
::
             Operador de expresión condicional                           C=(a>b)?a:b
?:


LO QUE DEBES DE TENER ENCUENTA.
La sobrecarga de operadores es la capacidad de asignar un nuevo significado a un operador cuando
una clase específica lo utiliza. Mediante ella, usted puede mejorar la legibilidad de un programa y
facilitar su entendimiento al expresar operaciones de clase de modo que se tenga mayor
significado.

      Para sobrecargar un operador debe definir la clase a la que lo asignara.

      Cuando usted sobrecarga un operador, la sobrecarga tiene efecto solo en una clase
       específica. Si el programa usa el operador con variables que no sean de esa clase, C++
       emplea la definición original del operador.

      Para sobrecargar un operador de clase, usted ocupa la palabra clave operator a fin de
       definir el método de clase que C++ llama cada vez que una variable de clase emplea el
       operador.

      C++ no permite que los programas sobrecarguen el operador (.),el del apuntador a un
       miembro (.*), el de resolución de alcance global (::)o el de expresión condicional (?:)


Anexo 7.1: realizar el de la práctica 7.2 pero con la siguiente clase:

class cadena
{
public:
      cadena(char *);
      char *operator +(char *);
      char *operator -(char);
      void ver_cadena();
private:
      char datos[256];

};

Anexo 7.2: realizar uno con lo que aprendiste.

Más contenido relacionado

La actualidad más candente

Funciones propias de visual basic
Funciones propias de visual basicFunciones propias de visual basic
Funciones propias de visual basicYesenia Bautista
 
08 strings o cadenas
08 strings o cadenas08 strings o cadenas
08 strings o cadenas
horusblom
 
eduardo hernandez investigacion 1
eduardo hernandez investigacion 1eduardo hernandez investigacion 1
eduardo hernandez investigacion 1
guest79d55c9
 
FUNCIONES LENGUAJE C
FUNCIONES LENGUAJE CFUNCIONES LENGUAJE C
FUNCIONES LENGUAJE C
Gustavo Salazar Loor
 
Funciones C++ modificado
Funciones C++ modificadoFunciones C++ modificado
Funciones C++ modificado
compumet sac
 
Apuntes1 elementos del lenguaje c
Apuntes1 elementos del lenguaje cApuntes1 elementos del lenguaje c
Apuntes1 elementos del lenguaje c
Zalimanunezc
 
Funciones en C
Funciones en CFunciones en C
Funciones en C
Ronny Parra
 
Manejo de cadenas de caracteres java
Manejo de cadenas de caracteres javaManejo de cadenas de caracteres java
Manejo de cadenas de caracteres javaEmerson Garay
 
5 Mecanismos Reuntilizacion Abstraccion Cont
5 Mecanismos Reuntilizacion Abstraccion Cont5 Mecanismos Reuntilizacion Abstraccion Cont
5 Mecanismos Reuntilizacion Abstraccion ContUVM
 
Introducción a las funciones en el lenguaje C
Introducción a las funciones en el lenguaje CIntroducción a las funciones en el lenguaje C
Introducción a las funciones en el lenguaje C
Diego Santimateo
 
Ejemplo de solución de práctica funciones stl
Ejemplo de solución de práctica funciones stlEjemplo de solución de práctica funciones stl
Ejemplo de solución de práctica funciones stl
UVM
 
Acciones funciones
Acciones funcionesAcciones funciones
Acciones funciones
Eliezer Cordova
 
Capítulo 6 funciones y procedimiento
Capítulo 6 funciones y procedimientoCapítulo 6 funciones y procedimiento
Capítulo 6 funciones y procedimientoEnAutomático
 
Programación Java
Programación JavaProgramación Java
Programación Java
Jano González
 
Funcion printf
Funcion printfFuncion printf
JavaScript funciones
JavaScript funcionesJavaScript funciones
JavaScript funciones
jcremiro
 

La actualidad más candente (20)

Funciones propias de visual basic
Funciones propias de visual basicFunciones propias de visual basic
Funciones propias de visual basic
 
C++ y sus librerias
C++ y sus libreriasC++ y sus librerias
C++ y sus librerias
 
08 strings o cadenas
08 strings o cadenas08 strings o cadenas
08 strings o cadenas
 
eduardo hernandez investigacion 1
eduardo hernandez investigacion 1eduardo hernandez investigacion 1
eduardo hernandez investigacion 1
 
FUNCIONES LENGUAJE C
FUNCIONES LENGUAJE CFUNCIONES LENGUAJE C
FUNCIONES LENGUAJE C
 
Video 1 metodos y arreglos
Video 1 metodos y arreglosVideo 1 metodos y arreglos
Video 1 metodos y arreglos
 
Herencia clase
Herencia claseHerencia clase
Herencia clase
 
Funciones C++ modificado
Funciones C++ modificadoFunciones C++ modificado
Funciones C++ modificado
 
Apuntes1 elementos del lenguaje c
Apuntes1 elementos del lenguaje cApuntes1 elementos del lenguaje c
Apuntes1 elementos del lenguaje c
 
Funciones en C
Funciones en CFunciones en C
Funciones en C
 
Manejo de cadenas de caracteres java
Manejo de cadenas de caracteres javaManejo de cadenas de caracteres java
Manejo de cadenas de caracteres java
 
Funciones en c++
Funciones en c++Funciones en c++
Funciones en c++
 
5 Mecanismos Reuntilizacion Abstraccion Cont
5 Mecanismos Reuntilizacion Abstraccion Cont5 Mecanismos Reuntilizacion Abstraccion Cont
5 Mecanismos Reuntilizacion Abstraccion Cont
 
Introducción a las funciones en el lenguaje C
Introducción a las funciones en el lenguaje CIntroducción a las funciones en el lenguaje C
Introducción a las funciones en el lenguaje C
 
Ejemplo de solución de práctica funciones stl
Ejemplo de solución de práctica funciones stlEjemplo de solución de práctica funciones stl
Ejemplo de solución de práctica funciones stl
 
Acciones funciones
Acciones funcionesAcciones funciones
Acciones funciones
 
Capítulo 6 funciones y procedimiento
Capítulo 6 funciones y procedimientoCapítulo 6 funciones y procedimiento
Capítulo 6 funciones y procedimiento
 
Programación Java
Programación JavaProgramación Java
Programación Java
 
Funcion printf
Funcion printfFuncion printf
Funcion printf
 
JavaScript funciones
JavaScript funcionesJavaScript funciones
JavaScript funciones
 

Similar a Sobrecarga de operadores

Trabajo tutorial de visual C++
Trabajo tutorial de visual C++Trabajo tutorial de visual C++
Trabajo tutorial de visual C++
Bryangio2002
 
Tutorial jared
Tutorial jaredTutorial jared
Tutorial jared
HUGOJAREDSANCHEZMARTINEZ
 
C++
C++C++
Cplus
CplusCplus
Investigacion sobre carga de metodos
Investigacion sobre carga de metodosInvestigacion sobre carga de metodos
Investigacion sobre carga de metodos
ArisRojas4
 
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)Videoconferencias UTPL
 
PHP MySql - FIEI - UNFV Clase03
PHP MySql - FIEI - UNFV Clase03PHP MySql - FIEI - UNFV Clase03
PHP MySql - FIEI - UNFV Clase03
Eddye Arturo Sanchez Castillo
 
Funciones C++
Funciones C++Funciones C++
Funciones C++Jarvis_15
 
Algoritmos y lenjuage de programacion
Algoritmos y  lenjuage de programacionAlgoritmos y  lenjuage de programacion
Algoritmos y lenjuage de programacionYsaac Ruiz
 
Jorge salazar 4 to b xd
Jorge salazar 4 to b xdJorge salazar 4 to b xd
Jorge salazar 4 to b xd
Jorgitop15
 
Jorge salazar 4 to b xd
Jorge salazar 4 to b xdJorge salazar 4 to b xd
Jorge salazar 4 to b xdJorgitop15
 
Jorge salazar 4 to b xd
Jorge salazar 4 to b xdJorge salazar 4 to b xd
Jorge salazar 4 to b xdJorgitop15
 
6 Upv Solo Pruebas 2009
6 Upv Solo Pruebas 20096 Upv Solo Pruebas 2009
6 Upv Solo Pruebas 2009
Pepe
 
El lenguaje C++ (1).ppt
El lenguaje C++ (1).pptEl lenguaje C++ (1).ppt
El lenguaje C++ (1).ppt
JOSECASHUUG
 

Similar a Sobrecarga de operadores (20)

Trabajo tutorial de visual C++
Trabajo tutorial de visual C++Trabajo tutorial de visual C++
Trabajo tutorial de visual C++
 
Tutorial jared
Tutorial jaredTutorial jared
Tutorial jared
 
C++
C++C++
C++
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
Cplus
CplusCplus
Cplus
 
Investigacion sobre carga de metodos
Investigacion sobre carga de metodosInvestigacion sobre carga de metodos
Investigacion sobre carga de metodos
 
!Prograc8
!Prograc8!Prograc8
!Prograc8
 
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
 
C ++
C ++C ++
C ++
 
PHP MySql - FIEI - UNFV Clase03
PHP MySql - FIEI - UNFV Clase03PHP MySql - FIEI - UNFV Clase03
PHP MySql - FIEI - UNFV Clase03
 
MéTodos
MéTodosMéTodos
MéTodos
 
MéTodos
MéTodosMéTodos
MéTodos
 
Funciones C++
Funciones C++Funciones C++
Funciones C++
 
Algoritmos y lenjuage de programacion
Algoritmos y  lenjuage de programacionAlgoritmos y  lenjuage de programacion
Algoritmos y lenjuage de programacion
 
MéTodos
MéTodosMéTodos
MéTodos
 
Jorge salazar 4 to b xd
Jorge salazar 4 to b xdJorge salazar 4 to b xd
Jorge salazar 4 to b xd
 
Jorge salazar 4 to b xd
Jorge salazar 4 to b xdJorge salazar 4 to b xd
Jorge salazar 4 to b xd
 
Jorge salazar 4 to b xd
Jorge salazar 4 to b xdJorge salazar 4 to b xd
Jorge salazar 4 to b xd
 
6 Upv Solo Pruebas 2009
6 Upv Solo Pruebas 20096 Upv Solo Pruebas 2009
6 Upv Solo Pruebas 2009
 
El lenguaje C++ (1).ppt
El lenguaje C++ (1).pptEl lenguaje C++ (1).ppt
El lenguaje C++ (1).ppt
 

Último

Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
ValeriaAyala48
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
Fernando Villares
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
Diagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdfDiagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdf
ManuelCampos464987
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
cj3806354
 
proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
raquelariza02
 
biogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectosbiogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectos
Luis Enrique Zafra Haro
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestre
DiegoCampos433849
 
Desarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdfDesarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdf
samuelvideos
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
IsabellaRubio6
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
coloradxmaria
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
AlejandraCasallas7
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
JimmyTejadaSalizar
 
Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
cristianrb0324
 
3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto
cdraco
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
CrystalRomero18
 
Diagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestreDiagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestre
rafaelsalazar0615
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
zoecaicedosalazar
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
CesarPazosQuispe
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
marianabz2403
 

Último (20)

Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
Diagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdfDiagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdf
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
 
proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
 
biogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectosbiogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectos
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestre
 
Desarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdfDesarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdf
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
 
Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
 
3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
 
Diagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestreDiagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestre
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
 

Sobrecarga de operadores

  • 1. Ing Gerardo García Gil SOBRE CARGA DE OPERADORES Como aprendió, el tipo de un a variable indica el conjunto de valores que esta pueda guardar, así como el conjunto de operaciones que usted puede hacer con ella. Por ejemplo, con una variable de tipo int el programa puede sumar, restar, multiplicar y dividir valores. En una cadena de caracteres, por otra parte, no tiene sentido utilizar el operador de adición para sumar dos cadenas. Cuando usted define una clase dentro de un programa, en esencia se define un tipo nuevo. Por tanto C++ le permite especificar las operaciones que le corresponden a ese tipo. La sobrecarga de operadores es el proceso de cambiar el significado de un operador (digamos de adición,+, que C++ utiliza generalmente para hacer sumas) para que lo use una clase especifica. En esta sección definiremos una clase llamada cadena y sobrecargaremos los operadores de la adición y sustracción. Para los objetos de la cadena, el operador de la adición añadirá letras específicas al contenido actual de una cadena. De modo similar, el operador de sustracción quitara cada aparición de una letra específica de la cadena. Cuando termine esta lección comprenderá los siguientes conceptos clave:  Usted sobrecarga operadores para mejorar la legibilidad de los programas. Debe sobrecargar un operador cuando, al hacerlo, sea más fácil de entender un programa.  Los programas de C++ usan la palabra reservada operator para sobrecarga de un operador  Cuando usted sobrecarga un operador, especifica una función que C++ invoca cada vez que la clase usa un operador sobrecargado. La función, a su vez, ejecuta las operaciones correspondientes.  Cuando un programa sobrecarga un operador para una clase específica, el significado del operador cambia solo para esa clase; el resto del programa continua usándolo para que ejecute sus operaciones ordinarias.  C++ permite a los programas sobrecargar casi todos los operadores; sin embargo, hay cuatro que no se pueden sobrecargar. SOBRECARGA DE LOS OPERADORES DE ADICIÓN Y SUSTRACCIÓN. Cuando usted sobrecarga un operador para una clase, la función de aquel no cambia para otros tipos de variables. Por ejemplo, si sobrecarga el operador de adicción para la clase cadena , su función no cambia cuando usted tenga que sumar dos números. Cuando el compilador de C++ encuentra el operador dentro del programa, determina que operación debe de hacer con base en el tipo de las variables correspondientes. La siguiente definición de la clase crea una clase llamada cadena, que contiene un miembro de datos, el cual es la cadena de caracteres en sí. La cadena contiene varios métodos y no define operador alguno:
  • 2. Ing Gerardo García Gil SOBRE CARGA DE OPERADORES PRACTICA 7.1 #include "stdafx.h" #include <string.h> #include <iostream> using namespace std; class cadena { public: cadena(char *); void sumar_letras(char *); void quitar_letras(char); void ver_cadena(); private: char datos[256]; }; cadena::cadena(char *str) { strcpy(datos,str); } void cadena::sumar_letras (char *str) { strcat(datos,str); } void cadena::quitar_letras(char letra) { char temp[256]; int i,j; for(i=0,j=0;datos[i];i++) { if(datos[i]!=letra) temp[j++]=datos[i]; temp[j]=NULL; } strcpy(datos,temp); } void cadena::ver_cadena() { cout<<datos<<endl; } int _tmain(int argc, _TCHAR* argv[]) { cadena titulo("c++ al rescate"); cadena leccion("sobrecarga de operadores"); titulo.ver_cadena (); titulo.sumar_letras (" al rescate!"); titulo.ver_cadena(); leccion.ver_cadena (); leccion.quitar_letras ('e'); leccion.ver_cadena(); return 0; }
  • 3. Ing Gerardo García Gil SOBRE CARGA DE OPERADORES Como puede ver, el programa emplea la función sumar_letras para agregar caracteres a la cadena variable titulo. Además, utiliza las funciones quitar_letras para eliminar cada aparición de la letra e de la cadena de caracteres lección. En este ejemplo usa llamadas a función para hacer tales operaciones. Utilizando la sobrecarga de operadores sin embargo, el problema puede hacer operaciones idénticas mediante los operadores de adición (+)y sustracción (-). Cuando usted sobrecarga un operador, utiliza la palabra clave operator de C++ dentro del prototipo y definición de la función para indicar al compilador de C++ que la clase ocupará este método como operador. La siguiente definición de clase; por ejemplo utiliza la palabra operator para asignar operadores de adición y sustracción a las funciones sumar_letras y quitar_letras. Dentro de la clase cadena: PRACTICA 7.2 #include "stdafx.h" #include <string.h> #include <iostream> using namespace std; class cadena { public: cadena(char *); void operator +(char *); void operator -(char); void ver_cadena(); private: char datos[256]; }; cadena::cadena(char *str) { strcpy(datos,str); } void cadena::operator +(char *str) { strcat(datos,str); } void cadena::operator -(char letra) { char temp[256]; int i,j; for(i=0,j=0;datos[i];i++) { if(datos[i]!=letra) temp[j++]=datos[i]; temp[j]=NULL; strcpy(datos,temp); }
  • 4. Ing Gerardo García Gil SOBRE CARGA DE OPERADORES } void cadena::ver_cadena() { cout<<datos<<endl; } int _tmain(int argc, _TCHAR* argv[]) { cadena titulo("c++ al rescate"); cadena leccion("sobrecarga de operadores"); titulo.ver_cadena (); titulo + " al rescate!"; titulo.ver_cadena(); leccion.ver_cadena (); leccion - 'e'; leccion.ver_cadena(); return 0; } Cuando usted crea sus propios tipos de datos utilizando clases, la operación común que hará es revisar si dos objetos son iguales. Mediante la sobrecarga de operadores, los programas pueden sobrecargar los operadores relacionales de igualdad (==), desigualdad(!=)u otros. El siguiente programa, añade el operador sobrecargado, los programas pueden probar si dos cadenas contienen lo mismo. PRACTICA 7.3 #include "stdafx.h" #include <string.h> #include <iostream> using namespace std; class cadena { public: cadena(char *); char *operator +(char *); char *operator -(char); int operator==(cadena); void ver_cadena(); private: char datos[256]; }; cadena::cadena(char *str) { strcpy(datos,str); }
  • 5. Ing Gerardo García Gil SOBRE CARGA DE OPERADORES char *cadena::operator +(char *str) { return(strcat(datos,str)); } char *cadena::operator -(char letra) { char temp[256]; int i,j; for(i=0,j=0;datos[i];i++) { //¿es la letra que se va a eliminar? if(datos[i]!=letra) // si no asignarla a temp temp[j++]=datos[i]; temp[j]=NULL; //copia el contenido de temp otra vez a datos } return(strcpy(datos,temp)); } int cadena::operator ==(cadena cade) { int i; for(i=0;datos[i]==cade.datos[i];i++) if((datos[i]==NULL)&&(cade.datos[i]==NULL)) return(1); return(0); } void cadena::ver_cadena() { cout<<datos<<endl; } int _tmain(int argc, _TCHAR* argv[]) { cadena titulo("c++ al rescate"); cadena leccion("sobrecarga de operadores"); cadena cade("c++ al rescate"); if(titulo==leccion) cout<<"titulo y leccion son iguales"<<endl; if(cade==leccion) cout<<"str y leccion son iguales"<<endl; if(titulo==cade) cout<<"titulo y str son iguales"<<endl; return 0; }
  • 6. Ing Gerardo García Gil SOBRE CARGA DE OPERADORES OPERADORES QUE NO PUEDEN SOBRECARGARSE. OPERADOR PROPÓSITO EJEMPLO Operador miembro de clase Objeto.miembro . Apuntador a un operador miembro Objeto.*miembro .* Operador de resolución de alcance global Nombreclase::miembro :: Operador de expresión condicional C=(a>b)?a:b ?: LO QUE DEBES DE TENER ENCUENTA. La sobrecarga de operadores es la capacidad de asignar un nuevo significado a un operador cuando una clase específica lo utiliza. Mediante ella, usted puede mejorar la legibilidad de un programa y facilitar su entendimiento al expresar operaciones de clase de modo que se tenga mayor significado.  Para sobrecargar un operador debe definir la clase a la que lo asignara.  Cuando usted sobrecarga un operador, la sobrecarga tiene efecto solo en una clase específica. Si el programa usa el operador con variables que no sean de esa clase, C++ emplea la definición original del operador.  Para sobrecargar un operador de clase, usted ocupa la palabra clave operator a fin de definir el método de clase que C++ llama cada vez que una variable de clase emplea el operador.  C++ no permite que los programas sobrecarguen el operador (.),el del apuntador a un miembro (.*), el de resolución de alcance global (::)o el de expresión condicional (?:) Anexo 7.1: realizar el de la práctica 7.2 pero con la siguiente clase: class cadena { public: cadena(char *); char *operator +(char *); char *operator -(char); void ver_cadena(); private: char datos[256]; }; Anexo 7.2: realizar uno con lo que aprendiste.