Académique Documents
Professionnel Documents
Culture Documents
SOBRECARGA DE OPERADORES
Al sobrecargar un operador no se puede cambiar la
precedencia del operador.
};
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.
PUNTERO THIS
Todo objeto tiene un puntero asociado a el, a este puntero
se llama puntero this.
El puntero this guarda la direccin de memoria del objeto
Este puntero apunta al mismo objeto
A travs de este puntero se accede a sus datos y
funciones miembro.
10
11
12
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();
}
13
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;
}
ALGORITMOS Y ESTRUCTURA DE DATOS
14
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;
}
15
#include <iostream>
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;
}
16
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;
}
ALGORITMOS Y ESTRUCTURA DE DATOS
17
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];
}
ALGORITMOS Y ESTRUCTURA DE DATOS
18
void VerMatriz();
bool SumaElementosEsPar();
void operator++(); // Incrementa los elementos de la matriz
ALGORITMOS Y ESTRUCTURA DE DATOS
19
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()
{
q.VerMatriz();
20
CONTINUACION
21
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++;
}
}
22
CONTINUACION
void Operadores::VerMatriz()
{ for(int i=0;i<N;i++)
{ for(int j=0;j<N;j++)
cout<<A[i][j]<<"\t";
cout<<endl;
}
}
void Operadores::operator++()
{ for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
A[i][j]++;
}
23
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 Operadores::operator*(int k)
{ for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
A[i][j]*=k;
}
24
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;
}
25
CONTINUACION
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;
}
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;
}
ALGORITMOS
Y ESTRUCTURA DE DATOS
26
CONTINUACION
27