Sobrecarga De Operadores
Enviado por teo123 • 19 de Octubre de 2012 • 2.119 Palabras (9 Páginas) • 394 Visitas
Funciones Amigas
Habrá momentos en los que se quiera que una función tenga acceso a los miembros privados de una clase sin que esa función sea realmente un miembro de esa clase. De cara a esto están las funciones amigas. Son útiles para la sobrecarga de operadores y la creación de ciertos tipos de funciones E/S.
El prototipo de esta funciones viene precedido por la palabra clave friend, cuando se desarrolla la función no es necesario incluir friend. Una función amiga no es miembro y no se puede calificar mediante un nombre de objeto. Estas funciones no se heredan y pueden ser amigas de más de una clase.
PROTOTIPO:
friend tipo_devuelto nombre(parametros);
DESARROLLO:
tipo_devuelto nombre(parametros){
cuerpo;
}
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
class miclase{
int n,d;
public:
miclase(int i, int j)
{
n=i;d=j;
}
friend int factor(miclase ob);
};
int factor(miclase ob)
{
if (!(ob.n%ob.d))
return 1;
else
return 0;
}
void main()
{
miclase obj1(10,2), obj2(3,2);
if(factor(obj2))
cout << "es factor";
else
cout << "no es factor";
getch();
}
Sobre Carga de Operadores
En programación, un operador sobrecargado es un caso específico de polimorfismo en donde algunos o todos los operadores (como +, =, o ==) tienen diferentes implementaciones dependiendo del contexto en que se usen (o sea, depende del tipo de dato de sus argumentos).
#include<stdio.h>
#include<iostream.h>
class binario{
float x;
public:
binario(){x=0.0;}
binario(float a){x=a;}
binario operator+(binario);
void visualizar(){cout<<"la suma es: " <<x<<"\n";}
};
binario binario::operator+(binario a)
{
return x+a.x;
}
main()
{
float s,y,z,ss;
cout<<"Introdusca el valor 1:";
cin>>s;
cout<<"Introdusca el valor 2:";
cin>>y;
cout<<"Introdusca el valor 1:";
cin>>z;
cout<<"Introdusca el valor 1:";
cin>>ss;
binario primero=s,segundo=y,tercero=z,cuarto=ss,a;
a=cuarto+tercero+primero + segundo;
a.visualizar();
return 0;}
#include <iostream.h>
class caja
{
int longitud;
int ancho;
public:
void coloca(int l, int w) {longitud = l; ancho = w;}
int obtiene_area(void) {return longitud * ancho;}
friend caja operator+(caja a, caja b); // Suma dos cajas
friend caja operator+(int a, caja b); // Suma una constante a una caja
friend caja operator*(int a, caja b); // Multiplica caja por una constante
};
caja operator+(caja a, caja b) // Suma el ancho de dos cajas
{
caja temp;
temp.longitud = a.longitud;
temp.ancho = a.ancho + b.ancho;
return temp;
}
caja operator+(int a, caja b) // Suma una constante a caja
{
caja temp;
temp.longitud = b.longitud;
temp.ancho = a + b.ancho;
return temp;
}
caja operator*(int a, caja b) // Multiplica caja por una constante
{
caja temp;
temp.longitud = a * b.longitud;
temp.ancho = a * b.ancho;
return temp;
}
int main()
{
...