Вы находитесь на странице: 1из 8

Programacin II.

Gua 6

Facultad:
Ingeniera
Escuela:
Computacin
Asignatura: Programacin II

Tema: Punteros a Objetos. Puntero this.


Objetivos
Especfico


Manejar objetos por medio de punteros.

Utilizar el puntero this.

Implementar programas en C++ que incluyan el uso de punteros a Objetos y la utilizacin


del puntero this.

Materiales y Equipo
Computadora con el software DevC++
Gua Nmero 6

Introduccin
Terica
Punteros a objetos.
Pueden declararse punteros que apuntan a objetos, la sintaxis a utilizar para la declaracin es
la comn, solo es diferente el modo en que es invocado un dato o funcin miembro. Con tal fin
se utiliza el operador "->.
La sintaxis para la declaracin de punteros a objetos es la siguiente:
<Nombre de clase> * <puntero a objeto>;

Un ejemplo de la declaracin basado en la clase celular de la gua anterior es el siguiente:


celular *pCell1;

Para definir un puntero apuntando a un objeto con asignacin dinmica de memoria se usa la
siguiente sintaxis:
<nombre de puntero> = new <nombre de clase>;

Programacin II, Gua 6

Ejemplo:
pCell1 = new celular(75757575);

La sintaxis para el acceso a miembros de clase a partir de un puntero a objeto es la siguiente


<nombre de puntero> -> <miembro>;

Ejemplo:
pCell1->llamar( );

Se recomienda que a los nombres de puntero se les anteponga una p para su rpido
reconocimiento por parte del programador.
Los punteros pueden inicializarse como puntero nulo o a travs de otro puntero ya inicializado.
Sin embargo estas opciones hacen al puntero una entidad dependiente de la memoria que se
haya reservado para los objetos que asignan su direccin al puntero. Para que el puntero
tenga respaldo independiente en memoria la va indicada es la reserva de memoria dinmica
para el mismo.
El puntero implcito "this".

El puntero this es un atributo especial del objeto, el cual guarda la direccin de memoria del
objeto para poder referirse a si mismo en cualquier momento, esto es usado por la manera de
distribuir los objetos en memoria: los atributos de cada objeto son independientes de los de
otro objeto, pero los mtodos son compartidos por todos los objetos declarados del mismo tipo
de clase, as cuando se llama un mtodo del objeto, implcitamente se manda como parmetro
el puntero this de ese objeto para que el mtodo sepa a que atributos referirse a la hora de
procesarlos.
En C++ se define this dentro de un objeto como un puntero al objeto en que est contenido. Se
declara implcitamente como:
class_name *this;
El puntero this se inicializa para apuntar al objeto para el cual se llama a la funcin miembro.
Este puntero es muy til cuando se trabaja con punteros y especialmente en listas enlazadas,
cuando se necesita referenciar un puntero al objeto que se est insertando en la lista.

Programacin II. Gua 6 3


La palabra this est disponible para este propsito y puede ser utilizada en cualquier objeto.
Realmente la forma apropiada de referenciar a cualquier variable en una lista es a travs del
uso del puntero predefinido this, escribiendo this -> nombre del miembro, pero el compilador
supone que se est usando, y podemos omitir el puntero.
Tambin hay que tomar en cuenta que:
El tipo de este apuntador this depende del tipo del objeto al cual apunta y que no puede ser
declarado explcitamente, es decir, es declarado y definido por el compilador.
Un uso del apuntador this es impedir que un objeto sea asignado a s mismo.
Es una variable local, es decir, que no puede ser usado explcitamente fuera de la clase.
El puntero this siempre es usado de manera implcita, asi la llamada a la funcin verNumero
del ejemplo de la clase celular, puede ser usada con el puntero this manteniendo su estructura:
char *celular::verNumero ( )
{ return this->miNumero;
}

Un ejemplo del uso del puntero this es el retornar la direccin de memoria del objeto:
celular *celular::miDireccionDeMemoria ( )
{ return this;
}

Procedimiento
Ejemplo 1:
Uso de puntero this y arreglo de objetos.

Programacin II, Gua 6

#include <iostream>
using namespace std;
class miclase
{ public:
miclase( ) { };
void EresTu(miclase& c)
{
if(&c == this)
cout << "Si, soy yo." << endl;
else
cout << "No, no soy yo." << endl;
}
};
int main()
{
miclase *pC1 = new miclase;
miclase *pC2 = new miclase;
pC1->EresTu(*pC2);
pC1->EresTu(*pC1);
cin.get();
return 0;
}
1. Para que sirve el puntero this en el ejemplo?
2. Porque se usa el operador * con los parmetros de la funcin EresTu
Ejemplo 2:
El siguiente ejemplo muestra otras formas de utilizar el puntero this.
#include<iostream>
#include<conio.h>
class Paralelepipedo
{ private:
float alto;
float ancho;
float largo;
double volumen;
public:
Paralelepipedo(float, float, float);
double calcular_volumen();
};
Paralelepipedo::Paralelepipedo(float x,float y,float z)
{ this->alto=x;
this->ancho=y;

Programacin II. Gua 6 5


this->largo=z;
}
double Paralelepipedo::calcular_volumen()
{ this->volumen=this->alto*this->ancho*this->largo;
return this->volumen;
}
int main()
{ Paralelepipedo objeto1 = Paralelepipedo(10,5,10);
cout<<"volumen de objeto 1: "<<objeto1.calcular_volumen();
getch();
}

Ejemplo 3:
En este ejemplo se muestran nicamente los cambios que habra que hacerse para el
ejemplo mostrado en la gua anterior (Gua No. 5), haciendo uso del puntero this.
#include <iostream>
#include <iomanip>
using namespace std;
#define CAL 5 // Define constante para el numero de calificaciones a manejar
class Alumno
// Definicin de la clase
{
private:
char nombre[50];
float calificaciones[CAL];
public:
Alumno(){};
~Alumno(){};
void ingresar();
// Funcin set
void mostrar_nombre(); // Muestra el nombre del alumno
void reporte();
// Muestra las notas del alumno
};
void Alumno::ingresar()
//Ingresa los datos de un alumno
{ fflush(stdin);
cout <<"Ingrese el Nombre del estudiante : ";
gets(this->nombre);
int i;
for (i = 0; i < CAL; i++)
{ cout << "Por favor ingrese la calificacion No. " << i+1; cout <<" : ";
cin >> this->calificaciones[i+1];

Programacin II, Gua 6

}
}
void Alumno::mostrar_nombre()
{ cout << this->nombre;
//Escribe el nombre del alumno en la pantalla
}
void Alumno::reporte()
{ int i;

//Genera reporte del estudiante seleccionado

cout<<"------------------------------------------------------"<<endl;
// Se le da formato a la tabla.
for (i = 0; i < CAL; i++)
{ cout<<setw(15)<<"Nota "<<i+1<<" : "<<this->calificaciones[i+1]<<setw(5)<<endl;
}
}
int main()
{ .
}

Anlisis de Resultados
Ejercicio 1:
Modifique el cdigo del ejercicio desarrollado en la gua anterior (Gua No. 5) para la
simulacin de un sistema de control de notas de tal manera que se utilice punteros a objetos y
el puntero this.

Investigacin
Complementaria
Escribir un programa en C++ que simule la operacin de una gasolinera haciendo uso de
punteros a objetos y el puntero this.
La gasolinera debe manejar al menos 6 bombas de combustible y cada bomba manejar tres
tipos de combustibles.
Los tipos de combustibles que se manejarn sern: Gasolina Especial, Gasolina Regular,
Diesel
En cualquier momento durante la simulacin deberamos poder determinar, a partir de la
bomba seleccionada, el precio por galn de combustible y la cantidad restante en el tanque de
suministro. Si la cantidad de combustible en el tanque de suministro es mayor o igual que la

Programacin II. Gua 6 7


cantidad de combustible solicitada, la solicitud debe despacharse; de lo contrario, solo deber
usarse la cantidad disponible en el tanque de suministro.
Una vez que se ha bombeado el combustible, deber desplegarse el precio total de los
galones surtidos y la cantidad de combustible en galones que se ha bombeado deber
restarse de la cantidad sobrante en el tanque.
Para la simulacin suponga que la capacidad de las bombas es la siguiente:
Para gasolina especial: 600 galones y el precio por galn es de $3.95.
Para gasolina regular: 800 galones y el precio por galn es de $3.50.
Para diesel: 800 galones y el precio por galn es de $3.25.
Deber considerarse un men con las siguientes opciones:
a) Verificar el nivel de combustible de una bomba en particular.
b) Verificar el precio por galn. Aqu deber considerarse la opcin de poder cambiar el
precio por galn del combustible en cualquier momento.
c) Surtir un pedido solicitado en un monto de dinero( por ejemplo: $15.00)
d) Surtir un pedido solicitado en nmero de galones( por ejemplo: 5 galones)
e) Salir de la aplicacin.
El programa debe estar debidamente comentado.

Programacin II, Gua 6

Gua
6:
Punteros
Puntero this.

Objetos.

Hoja de cotejo:

Alumno:

Mquina No:

Docente:

GL:

Fecha:

1-4

5-7

8-10

Conocimiento
deficiente de
los fundamentos
tericos

Conocimiento
y explicacin
incompleta de
los
fundamentos
tericos

Conocimiento
completo y
explicacin
clara de los
fundamentos
tericos

No tiene
actitud
proactiva.

Actitud
propositiva y
con
propuestas no
aplicables al
contenido de
la gua.

Tiene actitud
proactiva y
sus
propuestas
son
concretas.

6
1

EVALUACIN
%
CONOCIMIENTO

Del 20
al 30%

APLICACIN
DEL
CONOCIMIENTO

Del 40%
al 60%

ACTITUD
Del 15%
al 30%

TOTAL

100%

Nota

Вам также может понравиться