Operaciones con conjuntos en c++(interseccion,diferencia,union),)
1. Introducción a las funciones amigas (Funciones friend)
2. Funciones amigas
3. Clases amigas
4. Ejemplo: La clase fraccional. Métodos operadores amigos
LP2 – Clases y funciones amigas
2010/2011
Yolanda García Ruiz
1
Clases y funciones amigas: friend
Introducción: funciones amigas
Hemos visto que el acceso entre clases es imposible cuandodefinimos
los miembros como private.
class Punto
{
private :
float x;
float y;
public :
Punto ( );
void visualizar ( );
} ;
LP2 – Clases y funciones amigas
Desde una clase no se puede acceder a
los métodos o atributos privados de
otra clase.
Desde una función normal tampoco se
puede acceder a miembros privados de
una clase.
2010/2011
Yolanda García Ruiz
2Clases y funciones amigas: friend
Introducción: funciones amigas
Vamos a añadir un método público en la clase Punto llamado
distancia, que calcula la distancia entre dos puntos.
class Punto
{
private :
float x;
float y;
public :
Punto ( float a, float b );
void visualizar ( );
float distancia( Punto p );
} ;
float Punto:: distancia ( Punto p)
{ float d;
d= sqrt( sqrt(p.x-x)+sqrt(p.y- y) );
return d;
}
Punto c1(5, 2), c2(2,3);
Poco elegante
dist = c1.distancia(c2);
El método distancia tiene acceso a los atributos del objeto c1 (receptor
del mensaje), como a los atributos del objeto c2 (objeto argumento).
LP2 – Clases y funciones amigas
2010/2011
Yolanda García Ruiz
3
Clases y funciones amigas: friend
Introducción: funciones amigas
El métododistancia está operando sobre dos puntos, sería más vistoso
poder calcular la distancia de la siguiente forma:
Punto c1(5, 2), c2(2,3);
Mucho mejor
dist = distancia ( c1, c2 ) ;
Pero para ello, necesitamos que distancia sea una función de la forma:
float distancia ( Punto p1, Punto p2);
Función definida fuera de
la clase Punto
Pero si sacamos la función distancia fuera de la clasePunto, ya no
podemos acceder a los miembros privados de la clase Punto.
LP2 – Clases y funciones amigas
2010/2011
Yolanda García Ruiz
4
Clases y funciones amigas: friend
Funciones amigas
Para resolver éste problema, es decir, para que una función externa a la
clase pueda acceder a los atributos privados, C++ permite definir dicha
función como amiga de la clase.
En nuestroejemplo, podemos definir la función distancia como
amiga de la clase Punto.
class Punto
Para ello utilizamos la
{
palabra reservada friend
private :
float x;
float distancia ( Punto p1, Punto p2)
float y;
{ float d;
public :
d= sqrt( sqrt(p2.x-p1.x)+sqrt(p2.y - p1.y) );
Punto ( float a, float b );
return d;
void visualizar ( );
}
friend float distancia( Punto p1, Punto p2);
} ;
LP2 –Clases y funciones amigas
2010/2011
Yolanda García Ruiz
5
Clases y funciones amigas: friend
Funciones amigas
class Punto
float distancia ( Punto p1, Punto p2)
{
{ float d;
private :
d= sqrt( sqrt(p2.x-p1.x)+sqrt(p2.y - p1.y) );
float x;
float y;
return d;
public :
}
Punto ( float a, float b );
void visualizar ( );
friend float distancia( Punto p1, Punto p2);
} ;
•La implementación de la función distancia, no hace uso del operador
de ámbito (::) porque es una función amiga de Punto, pero no pertenece
a la clase.
• La llamada no necesita hacerse a través de un objeto de la clase.
• Las funciones amigas no contienen el argumento implícito this.
LP2 – Clases y funciones amigas
2010/2011
Yolanda García Ruiz
6
Clases y funciones amigas: friendFunciones amigas
La utilidad de las funciones amigas es poder acceder a los datos
privados de una o más clases.
Una función declarada friend de una clase C, es una función no
miembro de la clase, que puede acceder a los miembros privados de la
clase.
Una función amiga puede declararse en cualquier sección de la clase.
No es miembro de la clase, por lo que no se ve afectada por los...
Regístrate para leer el documento completo.