Está en la página 1de 14

1

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS


FACULTAD DE CIENCIAS MATEMTICAS
E.A.P Estadstica

2013

Prof. Elizabeth Murakami
elimura@hotmail.com
Programacin II
Constructores copiadores
Complejo::complejo(const complejo & fuente)
{
real=fuente.real;
Imag=fuente.imag;
}

Es aquel que crea un nuevo objeto a
partir de uno existente.
Tiene solo un argumento: una
referencia constante a un objeto de la
misma clase.

2

Uno de los objetivos de la POO es permitir al
usuario crear tipos abstractos de datos, de
igual forma que los tipos predefinidos, del
lenguaje, como char e int. Por ejemplo, las
variables de tipo int, float o char pueden
recibir el mismo valor que cualquier variable
del mismo tipo, utilizando una sentencia de
asignacin:
int a=b;
Ejemplo clase fibonacci
Fibonacci es un tipo abstracto de datos(clase)
que puede tener cualquier valor de la serie
matemtica de Fibonacci:


1 1 2 3 5 8 13
+
+
+

3
Class fibonacci
{
Public: //accesible desde el exterior de la clase
Fibonacci() {var1=0; var2=1;
resultado=var1+var2;}
Void incrementar()
{
var1=var2;
Var2=resultado;
Resultado=var1+var2;
}
Void visualizar()
{ cout<<resultado;
}
Private: //no accesible desde el exterior
Unsigned Long int var1,var2,resultado;
};

LLAMANDO A LAS COPIAS
Fibonacci(const fibonacci &p)
{ var1=p.var1;var2=p.var2;
resultado=p.resultado;)

4
Destructores
Es una funcin miembro con igual nombre
que la clase, pero precedido por un carcter
tilde (~). Una clase solo tiene una funcin
destructor, no tiene argumentos y no devuelve
ningn tipo.
Un destructor limpia el almacenamiento
asignado a los objetos cuando se crean.


Propiedades
El nombre del destructor es siempre el mismo
que el nombre de la clase precedido por el
smbolo (~).
No retorna valor.
No puede tener argumentos.
Cada clase tiene como mximo un destructor.
El compilador llama automticamente a un
destructor del objeto cuando el objeto sale
fuera de mbito.

5
Diferencias entre constructores y
destructores
Los destructores pueden ser virtuales, los
constructores no.
Los destructores no se pueden pasar como
argumentos.
Solo se puede declarar un destructor para una
clase dada.
class Punto {
public: int* coord;
Punto(int x = 0, int y = 0) { // construtor
coord = new int[2];
coord[0] = x; coord[1] = y;
}
~Punto() { // destructor
delete [] coord; // L.8:
};
6
Crear una clase sencilla y crear su destructor
Clases y funciones amigas: friend
1. Introduccin a las funciones amigas
(Funciones friend)
2. Funciones amigas
3. Clases amigas
4. Ejemplo: La clase fraccional. Mtodos
operadores amigos
5. Ejemplo: Las clases Coche y Camin.
7
Introduccin: funciones amigas.
Hemos visto que el acceso entre clases es
imposible cuando definimoslos miembros
como private.
Introduccin: funciones amigas
Vamos a aadir un mtodo pblico en la clase
Punto llamado distancia, que calcula la distancia
entre dos puntos.





El mtodo distancia tiene acceso a los atributos del
objeto c1 (receptor del mensaje), como a los atributos
del objeto c2 (objeto argumento).
8
El mtodo distancia est operando sobre dos
puntos, sera ms vistoso poder calcular la
distancia de la siguiente forma:


Pero para ello, necesitamos que distancia sea una
funcin de la forma:
Pero si sacamos la funcin distancia fuera de la
clase Punto, ya no podemos acceder a los
miembros privados de la clase Punto.
Para resolver ste problema, es decir, para que una
funcin externa a la clase pueda acceder a los
atributos privados, C++ permite definir dicha
funcin como amiga de la clase.
9

Funciones amigas
La utilidad de las funciones amigas es poder acceder a los
datos privados de una o ms clases.
Una funcin declarada friend de una clase C, es una funcin
no miembro de la clase, que puede acceder a los miembros
privados de la clase.
Una funcin amiga puede declararse en cualquier seccin de
la clase.
No es miembro de la clase, por lo que no se ve afectada por
los modificadores private y public.
Una funcin puede ser amiga de una clase y miembro de
otra.
10
Funciones amigas
Habamos visto que uno de los pilares de la programacin orientada a
objetos era la ocultacin de la informacin. La declaracin de funciones
amigas permite dotar a la POO de una mayor flexibilidad.

existe una puerta trasera para burlar la ocultacin de la informacin?.
Se preservan la seguridad y proteccin
que proporcionan las clases.

Es la clase la que dice quines son sus amigos y pueden acceder a sus
miembros privados.
Ninguna funcin puede autodeclararse amiga y acceder a la privacidad
de una clase sin que la propia clase tenga conocimiento de ello.
Clases amigas
Si queremos que todos los mtodos de una clase
sean amigos de otra, entonces declaramos toda la
clase como amiga.
11


12


13


14

Definir 2 clases amigas que compartar el
trabajo, ud elige la configuracin de ambas.