Sunteți pe pagina 1din 18

SOBRECARGA DE FUNCIONES

Es posible que en un programa se pueda crear una o


mas funciones con el mismo nombre.
Cada función definida deberá diferenciarse una de otra
por los parámetros.
Cuando se cumple este requisito, entonces hablamos
que la función esta sobrecargada.
El compilador C++ selecciona la función correcta
comparándola los tipos de argumentos en la llamada
con los que se especifican en la definición de la función.
En la sobrecarga de funciones en C++, se tiene que
asegurar que el numero y tipo de argumento de todas
las funciones sean diferentes.
C++ no permite sobrecarga de funciones que difieran
solo en el tipo de valor devuelto con return.

ALGORITMOS Y ESTRUCTURA DE DATOS 1


SOBRECARGA DE FUNCIONES
La tarea principal es permitir que el mismo nombre
de la función sea utilizado para diferentes procesos.

Ejemplos de declaración de funciones.


 void Misterio(int n);
 int Misterio(char x, float p);
 bool Misterio(int x[],int n);

C++ no permite sobrecarga de funciones que difieran solo en el


tipo de valor devuelto con return.
 double Calcular (int a);
 float Calcular(int b);

ALGORITMOS Y ESTRUCTURA DE DATOS 2


SOBRECARGA DE FUNCIONES
#include <iostream>
#include <string.h>
using namespace std;
// Declaracion de la funcion
int suma(int x,int y);
double suma(double x,float y);
char *Suma(char *x, char *y);

ALGORITMOS Y ESTRUCTURA DE DATOS 3


SOBRECARGA DE FUNCIONES
// programa principal
int main()
{ int a,b; double a1; float b1; char cad1[80],cad2[80];
cout<<"Ingrese valores enteros de a y b:";
cin>>a>>b; cout<<"La suma es:"<<suma(a,b)<<endl;
cout<<"Ingrese valores reales de a y b:"; cin>>a1>>b1;
cout<<"La suma es:"<<suma(a1,b1)<<endl;
cout<<"Ingrese las 2 cadenas ";
cin>>cad1>>cad2;
cout<<"La concatenacion es :"<<Suma(cad1,cad2)<<endl;
}

ALGORITMOS Y ESTRUCTURA DE DATOS 4


SOBRECARGA DE FUNCIONES
// Declaracion de funciones
int suma(int x,int y)
{ return x+y;
}
double suma(double x,float y)
{ return x+y;
}
char *Suma(char *a,char *b)
{ strcat(a,b); return a;
}

ALGORITMOS Y ESTRUCTURA DE DATOS 5


SOBRECARGA DE FUNCIONES
#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;
void Raices(int a,int b,int c);
void Raices(float a,float b,float c);
// programa principal
int main()
{ int a,b,c; float a1,b1,c1;
cout<<"Ingrese las constantes entereas a,b y c:"; cin>>a>>b>>c;
cout<<"Ingrese las constantes reales de a1, b1 y c1:";
cin>>a1>>b1>>c1;
cout<<"Las Raices de la Ecuacion con constantes Enteras"<<endl;
Raices(a,b,c);
cout<<"Las Raices de la Ecuacion con constantes Reales"<<endl;
Raices(a1,b1,c1);
}
ALGORITMOS Y ESTRUCTURA DE DATOS 6
SOBRECARGA DE FUNCIONES
void Raices(int a,int b,int c)
{
int d=0;
d=b*b-4*a*c;
if(d==0)
cout<<"Tiene raiz Unica:"<<-b/(2*a)<<endl;
else if(d>0)
{ cout<<"X1="<<(-b+sqrt(d))/(2*a)<<endl;
cout<<"X2="<<(-b-sqrt(d))/(2*a)<<endl;
}
else
cout<<"Tiene Raiz Imaginaria"<<endl;
}
ALGORITMOS Y ESTRUCTURA DE DATOS 7
SOBRECARGA DE FUNCIONES
void Raices(float a,float b,float c)
{ float d=0;
d=b*b-4*a*c;
if(d==0)
cout<<"Tiene raiz Unica:"<<-b/(2*a)<<endl;
else if(d>0)
{ cout<<"X1="<<(-b+sqrt(d))/(2*a)<<endl;
cout<<"X2="<<(-b-sqrt(d))/(2*a)<<endl;
}
else
cout<<"Tiene Raiz Imaginaria"<<endl;
}

ALGORITMOS Y ESTRUCTURA DE DATOS 8


SOBRECARGA DE FUNCIONES
Dado el programa principal se pide implementar las funciones:
void CalculaMuestra(int n): Esta función permite mostrar el equivalente
del numero ingresado pero en formato hexadecimal.
void CalculaMuestra(int n, int &p): Permite mostrar todos los números
de 3 cifras cuya suma de sus dígitos pares sea igual a la suma de sus
dígitos impares, para ello se brinda como dato el numero entero de 3
dígitos. Además contar cuantos números existe que cumplan esta
condición.

#include <iostream>
using namespace std;
const int N=50;

ALGORITMOS Y ESTRUCTURA DE DATOS 9


SOBRECARGA DE FUNCIONES
int Read()
{ int t;
do
{ cout<<"\nIngrese numero >=100 y <1000:";
cin>>t;
}while((t<100) || (t>=1000));
cout<<endl;
return t;
}

void Leer(int &n)


{ do
{ cout<<"Cual es el Numero:";
cin>>n;
}while(n<=10);
}

ALGORITMOS Y ESTRUCTURA DE DATOS 10


SOBRECARGA DE FUNCIONES
void CalculaMuestra(int n)
{ int a[N],i=0,m,b; b=n;
while(n!=0)
{ a[i]=n%16; n=n/16; i++;
}
m=i-1; cout<<"\nn = "<<b<<" en Hexadecimal = ";
for(i=m;i>=0;i--)
switch(a[i])
{ case 10:cout<<"A";break;
case 11:cout<<"B";break;
case 12:cout<<"C";break;
case 13:cout<<"D";break;
case 14:cout<<"E";break;
case 15:cout<<"F";break;
default:cout<<a[i];
}
cout<<endl;
}

ALGORITMOS Y ESTRUCTURA DE DATOS 11


SOBRECARGA DE FUNCIONES
void CalculaMuestra(int n, int &p)
{ int sp,si,i,d,b;
p=0;
for(i=n;i>=100 && i<1000;i++)
{ sp=0;si=0;b=i;
while(b!=0)
{ d=b%10;
(d%2==0) ? sp=sp+d : si=si+d;
b=b/10;
}
if(sp==si)
{ cout<<i<<" ";
p++;
}
}
cout<<endl;
}
ALGORITMOS Y ESTRUCTURA DE DATOS 12
SOBRECARGA DE FUNCIONES

//Programa principal
int main()
{ int n,m,t;
Leer(n);
CalculaMuestra(n);
t=Read();
CalculaMuestra(t,m);
cout<<"Cantidad de numeros ="<<m<<endl;
cout<<endl;
}

ALGORITMOS Y ESTRUCTURA DE DATOS 13


PROBLEMAS SOBRECARGA DE FUNCIONES
Sobrecargar la función llamada proceso:
• Si recibe como parámetro un entero x, para luego devolver otro
entero que resulta de restar el dígito menor a todos los dígitos de x.
Por ejemplo si x es 7258, el dígito menor es 2, la función devuelve
5036.
• Si el parámetro es un arreglo a, de N datos enteros, la función
devuelve la posición del valor más próximo al promedio de los datos
que contienen dígitos primos.
#include <iostream>
#include <math.h>
using namespace std;
const int N=6;
void ver(int a[])
{ for(int i=0;i<N;i++)
cout<<a[i]<<"\t";
cout<<endl;
}
ALGORITMOS Y ESTRUCTURA DE DATOS 14
PROBLEMAS SOBRECARGA DE FUNCIONES
int proceso( int x )
{ int y, d, dm, p;
dm = 10; y = x;
while ( y != 0 )
{ d = y % 10;
if ( d < dm )
dm = d;
y = y /10;
}
p = 1;
y = 0;
while (x!= 0 )
{ d = x % 10; y = y + p*(d-dm);
p = p * 10; x = x / 10;
}
return y;
}
ALGORITMOS Y ESTRUCTURA DE DATOS 15
PROBLEMAS SOBRECARGA DE FUNCIONES

bool tieneprimos( int x )


{ int d;
while ( x != 0 )
{ d = x % 10;
if ( d == 2 || d == 3 || d == 5 || d == 7 )
return true;
x = x / 10;
}
return false;
}

ALGORITMOS Y ESTRUCTURA DE DATOS 16


PROBLEMAS SOBRECARGA DE FUNCIONES
int proceso ( int a[N] )
{ int s=0,c=0,i,p,pos=0;
for (i=0;i<N;i++)
if (tieneprimos( a[i] ) )
{ s+= a[i];
c++;
}
p = s/c;
for (i=1;i<N;i++)
if ( abs( a[i]-p ) < abs( a[pos] - p ) )
pos = i;
return pos;
}

ALGORITMOS Y ESTRUCTURA DE DATOS 17


PROBLEMAS SOBRECARGA DE FUNCIONES
//Programa principal
int main()
{ int n=9857,a[]={4583,12468,5874,2010,9864,1276};
cout<<"n = "<<n<<" nuevo valor de n = "<<proceso(n)<<endl;
cout<<endl; ver(a);
cout<<"\nLa posicion es = "<<proceso(a)<<endl;
cout<<endl;
system("pause");
}

ALGORITMOS Y ESTRUCTURA DE DATOS 18

S-ar putea să vă placă și