Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
UNIVERSIDAD NACIONAL DE INGENIERIA FACULTAD DE INGENIERIA MECANICA COMPUTACION II MB_544  Tema:  FUNCIONES AMIGAS Ing. Dan...
Funciones Amigas <ul><li>Habrá momentos en los que se quiera que una función tenga acceso a los miembros privados de una c...
<ul><li>El calificador friend para una función hace mas eficiente en C++, realizar aplicaciones OOP. </li></ul><ul><li>Seg...
Para declarar una función amiga simplemente se antepone la palabra   friend  al prototipo de la función. Sintaxis: class  ...
friend int sumaCLASS(CLASS X) //funcion Amiga {return X.a + X.b;  } friend int restaCLASS(CLASS X) {  return X.a - X.b;  }...
main(){ int m,n; cout<<&quot;Ingrese el valor de a:&quot;;cin>>m; cout<<&quot;Ingrese el valor de b:&quot;;cin>>n; CLASS X...
/* El siguiente programa permitirá tener una idea concreta de la forma como se aplica una funcion amiga */ #include<iostre...
“ Aquí está la definición de la función amiga. Devuelve verdadero si d es un factor de n. Observe que en la definición de ...
main() { myclass ob1(10,2),ob2(13,3); if(isfactor(ob1)) cout<<&quot;2 es un factor de 10 
&quot;; else cout<<&quot;2 no es...
#include <iostream.h> #include <conio.h> class dat{ int dato; public: friend void cargar(dat & , int x); void visualizar()...
void cargar(dat &t, int x) //  pasa un objeto de tipo dat   {t.dato=x;} imain() { int w; dat t; cout<<&quot;Ingrese el Val...
/* Uso de la funcion amiga en una serie con factorial   */  #include<iostream.h> #include<conio.h> class SFa{ private: int...
float Suma(int N); //void Show(int N); }; SFa::SFa(int x) {N=x;} float SFa::Suma(int N){ S=0; for(i=1;i<=N;i++) S=S+i*1.0/...
main() { int M; cout<<&quot;Ingrese el numero de términos:&quot;; cin>>M; SFa SF(M); cout<<&quot;La suma es &quot;<<SF.Sum...
// Se trata de saber cual es mas rápido o un tractor o un coche #include<iostream.h> #include<conio.h> class tractor ; cla...
int sp_greater(car c , tractor t) {  return (c.speed-t.speed); } main()  {  int t ; car c1(6,55),c2(2,120); tractor t1(100...
if (t==0) cout<<&quot;la velocidad del tractor y del coche son iguales
&quot; ; else cout<<&quot;el coche es mas rapido 
&...
//Una aplicación con Números complejos simple #include<iostream.h> #include<conio.h> #include<conio.h> class complejo{  fl...
void suma(complejo x,complejo y,complejo &z) {z.real=x.real+y.real;  z.imag=x.imag+y.imag; } main(){   complejo x(1.0,2.0)...
Upcoming SlideShare
Loading in …5
×

Funciones amigas

6,708 views

Published on

Published in: Technology, News & Politics
  • Be the first to comment

Funciones amigas

  1. 1. UNIVERSIDAD NACIONAL DE INGENIERIA FACULTAD DE INGENIERIA MECANICA COMPUTACION II MB_544 Tema: FUNCIONES AMIGAS Ing. Daniel Osorio Maldonado
  2. 2. Funciones Amigas <ul><li>Habrá momentos en los que se quiera que una función tenga acceso a los miembros privados de una clase sin que esta función sea realmente un miembro de esa clase. </li></ul><ul><li>Una función amiga no es un miembro de una clase, pero todavía tiene acceso a sus elementos privados. </li></ul><ul><li>Una Función amiga de una clase es una función no miembro que puede acceder a los datos miembros privados y protegidos de la clase. </li></ul>
  3. 3. <ul><li>El calificador friend para una función hace mas eficiente en C++, realizar aplicaciones OOP. </li></ul><ul><li>Según las reglas para ocultar datos en una clase, el acceso a los datos privados solo es realizado por funciones miembros. en algunas oportunidades, es necesario usar datos privados, desde una función foránea, en este caso se debe aplicar la siguiente sintaxis a la función </li></ul><ul><li> friend <identificador> </li></ul><ul><li>En el resto de los aspectos, una función amiga es una función común y corriente en declaración, definición y ámbito. </li></ul>
  4. 4. Para declarar una función amiga simplemente se antepone la palabra friend al prototipo de la función. Sintaxis: class nombre_clase { friend funcion_amiga ( ); { (sentencias ) } // Considere el siguiente ejemplo #include<iostream.h> #include<conio.h> #include<iomanip.h> #include<stdlib.h> class CLASS{ private: int a; int b; public: CLASS(int i,int j)//constructor {a=i;b=j;}
  5. 5. friend int sumaCLASS(CLASS X) //funcion Amiga {return X.a + X.b; } friend int restaCLASS(CLASS X) { return X.a - X.b; } friend int divisionCLASS(CLASS X){ if(X.b) //verifica si es cierto que ´b´no es cero return X.a % X.b; else{ cout<<&quot;No Hay division por cero&quot;; exit(0);} } };
  6. 6. main(){ int m,n; cout<<&quot;Ingrese el valor de a:&quot;;cin>>m; cout<<&quot;Ingrese el valor de b:&quot;;cin>>n; CLASS X(m,n); cout<<setw(5);//Establece un ancho de 5 int X1=sumaCLASS(X);//Legal int X2=restaCLASS(X);//Legal int X3=divisionCLASS(X);//ILegal cout<<&quot; La suma es: &quot;<<X1<<setw(3)<<endl <<&quot;La resta es: &quot;<<X2<<setw(3)<<endl <<&quot;El resto es:&quot;<<X3<<setw(3); // <<&quot;EL producto es: &quot;<<X3<<setw(3); getch(); }
  7. 7. /* El siguiente programa permitirá tener una idea concreta de la forma como se aplica una funcion amiga */ #include<iostream.h> #include<conio.h> #include<iomanip.h> #include<stdlib.h> class myclass{ private: int n,d; public: myclass(int i,int j){ n=i;d=j;} friend int isfactor(myclass ob); };
  8. 8. “ Aquí está la definición de la función amiga. Devuelve verdadero si d es un factor de n. Observe que en la definición de isfactor( ) no se utiliza la palabra clave friend” int isfactor(myclass ob){ if(!(ob.n%ob.d)) return 1; else return 0; }
  9. 9. main() { myclass ob1(10,2),ob2(13,3); if(isfactor(ob1)) cout<<&quot;2 es un factor de 10 &quot;; else cout<<&quot;2 no es un factor de 10 &quot;; if(isfactor(ob2)) cout<<&quot;3 es un factor de 13 &quot;; else cout<<&quot;3 no es un factor de 13 &quot;; getch(); }
  10. 10. #include <iostream.h> #include <conio.h> class dat{ int dato; public: friend void cargar(dat & , int x); void visualizar(); }; void dat::visualizar(){ cout<<&quot; El Valor Visualizado es: &quot;; cout<<dato; }
  11. 11. void cargar(dat &t, int x) // pasa un objeto de tipo dat {t.dato=x;} imain() { int w; dat t; cout<<&quot;Ingrese el Valor del dato t= : &quot;;cin>>w; cargar(t, w); t.visualizar(); getch(); }
  12. 12. /* Uso de la funcion amiga en una serie con factorial */ #include<iostream.h> #include<conio.h> class SFa{ private: int i,N; float S; public: SFa(int x); friend long Facto(SFa Z) {if(Z.N==1) return(1); else return(Z.N*(Facto(Z.N-1))); }
  13. 13. float Suma(int N); //void Show(int N); }; SFa::SFa(int x) {N=x;} float SFa::Suma(int N){ S=0; for(i=1;i<=N;i++) S=S+i*1.0/Facto(i); return(S); } //void SFa::Show(int N) //{cout<<S;} // Pruebe ud con show y haga las modificaciones del caso
  14. 14. main() { int M; cout<<&quot;Ingrese el numero de términos:&quot;; cin>>M; SFa SF(M); cout<<&quot;La suma es &quot;<<SF.Suma(M); getch(); }
  15. 15. // Se trata de saber cual es mas rápido o un tractor o un coche #include<iostream.h> #include<conio.h> class tractor ; class car { int possengers; int speed; public: car(int p , int s) { possengers=p; speed=s; } friend int sp_greater(car c ,tractor t); } ;
  16. 16. int sp_greater(car c , tractor t) { return (c.speed-t.speed); } main() { int t ; car c1(6,55),c2(2,120); tractor t1(10000,55),t2(20000,72); cout<<&quot;comparando c1 y t1 : &quot;; t=sp.greater(c1,t1); if (t<0) cout<<&quot;el tractor es mas rapido &quot;; else
  17. 17. if (t==0) cout<<&quot;la velocidad del tractor y del coche son iguales &quot; ; else cout<<&quot;el coche es mas rapido &quot;; cout<<&quot;comparando c2 y t2 &quot;; t=sp_greater(c2,t2); if(t<0) cout<<&quot;el tractor es mas rapido &quot;; else if(t==0) cout<<&quot;la velocidad del coche y del tractor es la misma &quot;; else cout<<&quot;el coche es mas rapido &quot;; getch(); }
  18. 18. //Una aplicación con Números complejos simple #include<iostream.h> #include<conio.h> #include<conio.h> class complejo{ float real; float imag; public: complejo(float a,float b); void show(); friend void suma(complejo x,complejo y, complejo &z); }; complejo::complejo(float a,float b) { real =a; imag=b; } void complejo::show(){ cout<<real<<&quot; + &quot;<<imag<<&quot;i &quot;; }
  19. 19. void suma(complejo x,complejo y,complejo &z) {z.real=x.real+y.real; z.imag=x.imag+y.imag; } main(){ complejo x(1.0,2.0); complejo y(2.0,1.0); complejo z(0,0); cout<<&quot; Suma de : &quot;; x.show(); cout<<&quot; =&quot;; y.show(); cout<<&quot; =&quot;; suma(x,y,z); z.show(); getch(); /*Realice las modificaciones para valores no constantes y para valores aleatorios*/

×