You are on page 1of 0

Ing.

Felix Huari Algoritmos y Programacin 1


SOBRECARGA DE OPERADORES
La sobrecarga de operadores es similar a la
sobrecarga de funciones.
El operador sobrecargado no pierde su contenido
original.
Para sobrecargar un operador, se crea una funcin
operadora.
Un operador solo funciona con objetos de una clase.
Por lo general la funcin operadora es miembro de la
clase o una funcin amiga.
El valor devuelto de la funcin operadora es la clase
para la que se define.
Ing. Felix Huari Algoritmos y Programacin 2
SOBRECARGA DE OPERADORES
Al sobrecargar un operador no se puede cambiar la
precedencia del operador.
El numero de operandos que tiene un operador no
puede modificarse.
Los operandos que no se puede sobrecargar son .,
::, .*, ? y los operadores preprocesador.
No podemos construir nuestros propios operadores,
solo es posible sobrecargar los operadores definidos
en el C++
Ing. Felix Huari Algoritmos y Programacin 3
DECLARACION DE LA FUNCION PROTOTIPO
DE SOBRECARGA
Para declara debe incluir el prototipo de la funcin dentro
de la clase o indicar como funcin amiga.
class <Nombre de la clase>
{ private:
<tipo dato> datos privados;
public:
<tipo dato> Nombre funcion(lista parametros);
<tipo dato> operator <op> (lista parametros);
};
Ing. Felix Huari Algoritmos y Programacin 4
DEFINICION DE LA FUNCION DE
SOBRECARGA
Para definir una funcin de sobrecarga es como sigue:
<tipo de dato> <Nombre clase>:: operator <op> (Lista parametros)
{
Sentencia(s);
}
Ing. Felix Huari Algoritmos y Programacin 5
SOBRECARGA DE OPERADORES
LA SOBRECARGA DE OPERADORES BINARIOS
La funcin tendr solo un parmetro.
Este parmetro contendr al objeto que esta en el lado derecho.
El objeto del lado izquierdo genera la llamada a la funcin
operadora y se pasa implcitamente a travs de this.
SOBRECARGA DE UN OPERADOR UNARIO
Solo se tiene un operando
No tiene parmetros.
El operando genera la llamada a la funcin operadora.
Ing. Felix Huari Algoritmos y Programacin 6
SOBRECARGA DE OPERADOR BINARIO +
#include <iostream>
// Declaracion de la clase
class punto
{ private:
int x,y,z;
public:
punto(){} // Constructor vacio
punto(int, int, int);
void MostrarPunto();
punto operator+(punto q); // Sobrecarga de funcion
operador +
};
Ing. Felix Huari Algoritmos y Programacin 7
CONTINUACION ...
// programa principal
int main()
{
punto p1(1,1,8),p2(3,2,-1),p3;
cout<<"\tP1=";p1.MostrarPunto();
cout<<"\tP2=";p2.MostrarPunto();
p3=p1+p2; //Suma los dos objetos y ocurre la
llamada a operator+()
cout<<"----------------------------"<<endl;
cout<<"\tP3=";p3.MostrarPunto();
system("PAUSE");
}
Ing. Felix Huari Algoritmos y Programacin 8
CONTINUACION ...
//Definicion de las funciones miembro de la clase
punto::punto(int a, int b, int c)
{ x=a;
y=b;z=c;
}
void punto::MostrarPunto()
{
cout<<"("<<x<<","<<y<<","<<z<<")"<<endl;
}
Ing. Felix Huari Algoritmos y Programacin 9
CONTINUACION ...
punto punto::operator+(punto q)
{
punto temp;
temp.x=x+q.x;
temp.y=y+q.y;
temp.z=z+q.z;
return temp;
}
Ing. Felix Huari Algoritmos y Programacin 10
SALIDA DEL RESULTADO
Ing. Felix Huari Algoritmos y Programacin 11
SOBRECARGA OPERADOR UNARIO [ ]
/* Dado el programa principal como dato se pide definir la clase misterio
y las funciones necesarias para producir la siguiente salida */
#include <iostream>
#include <stdlib.h>
using namespace std;
// programa principal
int main()
{ misterio x(10,20,30);
for(int i=0;i<3;i++)
cout<<"\t"<<x[i];
cout<<endl<<endl;
system("pause");
}
Ing. Felix Huari Algoritmos y Programacin 12
SOBRECARGA OPERADOR [ ]
#include <iostream>
#include <stdlib.h>
using namespace std;
class misterio
{ private:
int a,b,c;
int A[3];
public:
misterio(int, int, int);
int operator[](int); // sobrecarga del operador []
};
int main()
{ misterio x(10,20,30);
for(int i=0;i<3;i++)
cout<<"\t"<<x[i];
cout<<endl<<endl;
system("pause");
}
Ing. Felix Huari Algoritmos y Programacin 13
SOBRECARGA OPERADOR [ ]
misterio::misterio(int r, int s, int t)
{
a=r;
b=s;
c=t;
}
int misterio::operator[](int i)
{ if(i==0)
A[i]=a;
else if(i==1)
A[i]=b;
else
A[i]=c;
return A[i];
}
Ing. Felix Huari Algoritmos y Programacin 14
EJEMPLO DE APLICACIN DE SOBRECARGA DE
OPERADORES
#include <iostream>
using namespace std;
const int M=20; // Dato asumido para efectos de declaracion
class Operadores
{ private:
int N; // Indica el tamao de la matriz cuadrada A
int A[M][M]; // Es la matriz
public:
Operadores(int);
void Generar();
void VerMatriz();
bool SumaElementosEsPar();
void operator++(); // Incrementa los elementos de la matriz
Ing. Felix Huari Algoritmos y Programacin 15
CONTINUACION
void operator+(int k); //Incrementa los elementos de la matriz en k
void operator*(int b); //Multiplica los elementos de la matriz por b
friend void operator-(Operadores &p, int a); //Decrementa los elementos de la
matriz en a
friend void operator/(Operadores &p,int b); //Decrementa los elementos de la
matriz en b
void operator%(int); //Almacena como elementos el resto
}; // fin de la clase
int main()
{ Operadores q(3);int a=5,b=7,c=3,d=1,e=3;
q.Generar();cout<<"Matriz Original"<<endl; q.VerMatriz();
++q;cout<<"Matriz Original Incrementados en una unidad sus
elementos"<<endl; q.VerMatriz();
q+a;cout<<"Matriz incrementado en "<<a<<" veces"<<endl;
Ing. Felix Huari Algoritmos y Programacin 16
CONTINUACION
q.VerMatriz();cout<<"Matriz multiplicada sus elementos por
"<<b<<endl;
q*b; q.VerMatriz();
if(q.SumaElementosEsPar())
cout<<"Es Verdad\n";
else
cout<<"Es falso\n";
q/e;cout<<"Matriz dividido entre "<<e<<endl; q.VerMatriz();
q%c; cout<<"Matriz con resto "<<c<<endl; q.VerMatriz();
q-d;cout<<"Matriz con diferencia de "<<d<<endl;
q.VerMatriz();
system("PAUSE");
}
Ing. Felix Huari Algoritmos y Programacin 17
CONTINUACION
Operadores::Operadores(int m)
{ N=m; }
void Operadores::Generar()
{ int k=1,i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
{ while(k%2!=0)
{ A[i][j]=k; k++; }
k++;
}
}
void Operadores::VerMatriz()
{ for(int i=0;i<N;i++)
{ for(int j=0;j<N;j++)
cout<<A[i][j]<<"\t";
cout<<endl;
}
}
Ing. Felix Huari Algoritmos y Programacin 18
CONTINUACION
void Operadores::operator++()
{ for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
A[i][j]++;
}
void Operadores::operator+(int k)
{ for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
A[i][j]+=k;
}
void Operadores::operator*(int k)
{ for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
A[i][j]*=k;
}
Ing. Felix Huari Algoritmos y Programacin 19
CONTINUACION
void Operadores::operator%(int k)
{ for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
A[i][j]%=k;
}
void operator-(Operadores &p, int a)
{ for(int i=0;i<p.N;i++)
for(int j=0;j<p.N;j++)
p.A[i][j]-=a;
}
void operator/(Operadores &p,int b)
{ for(int i=0;i<p.N;i++)
for(int j=0;j<p.N;j++)
p.A[i][j]/=b;
}
Ing. Felix Huari Algoritmos y Programacin 20
CONTINUACION
bool Operadores::SumaElementosEsPar()
{
int i,j,s=0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
s+=A[i][j];
if(s%2==0)
return true;
else
return false;
}

You might also like