Funciones amigas

5,365 views
5,059 views

Published on

Published in: Technology, News & Politics
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,365
On SlideShare
0
From Embeds
0
Number of Embeds
36
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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*/

×