Dev - C++ - FUNCIONES AMIGAS Y VIRTUALES

 
Vista:

FUNCIONES AMIGAS Y VIRTUALES

Publicado por Anita (2 intervenciones) el 06/07/2007 18:26:57
ME PUEDEN EXPLICAR ESTE EJEMPLO?

#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(obj1))
cout << "es factor";
else
cout << "no es factor";
getch();
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:FUNCIONES AMIGAS Y VIRTUALES

Publicado por Cesar Arriaga (1 intervención) el 07/07/2007 22:50:00
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <process.h>
void main(main)
{
int n, d;
solo una pergunat factores de que ?

si podes mandame el planteamiento del problema que gusto te ayudare!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:FUNCIONES AMIGAS Y VIRTUALES

Publicado por Zoto (4 intervenciones) el 21/07/2007 00:38:42
Este ejemplo utiliza una clase llamada "miclase" y una función amiga llamada "factor".

La clase "miclase" tiene como atributos dos enteros (n y d).
Como métodos tiene un constructor para la clase, que toma obligatoriamente dos valores enteros y los asigna a cada uno de los atributos.
En esta clase, se declara como amiga la función "factor".
Esta función, al ser declarada como amiga, tendrá la posiblidad de acceder a los atributos y métodos privados de la clase, como si de un método de la misma clase se tratara.
Lo que hace la función "factor" es comparar si el atributo "n" (número) de un objeto de la clase "miclase" es múltiplo de su atributo "d" (divisor).
Para lograrlo, utiliza el operador % (llamado módulo).
Este operador devuelve el resto/residuo resultante de la división entre dos números enteros.
Por ejemplo:

5%2 ---> 1 (ya que 5 entre 2 da 2 de cociente y 1 de resto)
4%2 ----> 0 (ya que 4 entre 2 da 2 de cociente y 0 de resto)
73%4 ----> 1 (ya que 73 entre 4 da 18 de cociente y 1 de resto)

Teniendo la siguiente expresión: n%d
Sabremos que "d"es divisor exacto de "n" si el valor devuelto por la operación es 0 (puesto que eso significará que el resto de la división es 0 y, por lo tanto, es exacta).
En la función "factor" se realiza esta operación y se comprueba si evalua falso, en dicho caso el resultado sería 0 y "n" sería múltiplo de "d".
Contrariamente, la división no sería exacta (habría resto) y la expresión if se evaluaría como verdadera.
En cada caso se devuelve un valor bool de retorno:
true --> si es divisor exacto
false --> si NO es divisor exacto

Lo que resulta importante observar es que la función "factor" accede a los atributos del objeto de la clase "miclase" pasado como argumento (ob) sin necesidad de métodos de acceso: lo hace accediendo de manera directa, como si fuese un método de la misma clase. Eso es consecuencia de su relación de amistad con "miclase", especificada en su declaración en esa misma clase.

La función "main" del programa utiliza la función factor para crear dos objetos "miclase" y comprobar la divisiblidad exacta entre sus atributos "n" y "d" de uno de ellos, imprimiendo un mensaje de acuerdo con ello.

Espero que mi explicación te haya resultado entendedora.
Hasta otra,

Zoto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar