User avatar by pello in January 1, 1970, 1:00 am
Los punteros
Acaso creiais que en c++ no habia punteros? eso solo ocurre en Java. Los punteros no contienen datos, contienen direcciones de memoria. Para cada tipo de dato hay que definir un puntero.
/**
* Puntero.cpp
* 
* Clase que muestra las direcciones de variables
* Pello Xabier Altadill Izura
* Compilar: g++ Puntero.cpp -o Puntero
*/

#include <iostream.h>

int main () {

// Creamos varias variables:
int pruebaInt = 99, prueba2Int;
short pruebaShort = 34;
char carac = 'a';
int *puntero = 0;
int *punteroNuevo;


// Ahora las mostramos por pantalla:
cout << "Variable pruebaInt: " << pruebaInt << endl;
cout << "Direccion pruebaInt: " << &pruebaInt << endl << endl;

cout << "Variable prueba2Int: " << prueba2Int << endl;
cout << "Direccion prueba2Int: " << &prueba2Int << endl << endl;

cout << "Variable pruebaShort: " << pruebaShort << endl;
cout << "Direccion pruebaShort: " << &pruebaShort << endl << endl;

cout << "Variable carac: " << carac << endl;
cout << "Direccion carac: " << &carac << endl << endl;

cout << "Variable puntero: " << puntero << endl;
// ATENCION, si el puntero no tiene valor dara
// SEGMENTATION FAULT y la CAGAREMOS de gordo
//cout << "Variable puntero: " << *puntero << endl;
cout << "Direccion puntero: " << &puntero << endl << endl;

puntero = &pruebaInt;

cout << "Variable puntero: " << puntero << endl;
cout << "Variable puntero: " << *puntero << endl;
cout << "Direccion puntero: " << &puntero << endl << endl;


return 0;
}
Veamos otro ejemplo...
/**
* Puntero2.cpp
* 
* Clase que muestra mas usos de los punteros
* Pello Xabier Altadill Izura
* Compilar: g++ Puntero2.cpp -o Puntero2
*/

#include <iostream.h>

// prototipo de funciones que implementamos luego
int devuelve(int *punteroInt, int entero);

int main () {

// Creamos varias variables:
int pruebaInt = 99, prueba2Int;
short pruebaShort = 34;
char carac = 'a';
int *puntero = 0;
int *punteroNuevo;


// Ahora las mostramos por pantalla:
cout << "Variable pruebaInt: " << pruebaInt << endl;
cout << "Direccion pruebaInt: " << &pruebaInt << endl << endl;

cout << "Variable prueba2Int: " << prueba2Int << endl;
cout << "Direccion prueba2Int: " << &prueba2Int << endl << endl;

cout << "Variable pruebaShort: " << pruebaShort << endl;
cout << "Direccion pruebaShort: " << &pruebaShort << endl << endl;

cout << "Variable carac: " << carac << endl;
cout << "Direccion carac: " << &carac << endl << endl;

cout << "Variable puntero: " << puntero << endl;
// ATENCION, si el puntero no tiene valor dara
// SEGMENTATION FAULT y la CAGAREMOS
//cout << "Variable puntero: " << *puntero << endl;
cout << "Direccion puntero: " << &puntero << endl << endl;

puntero = &pruebaInt;

cout << "Variable puntero: " << puntero << endl;
cout << "Variable puntero: " << *puntero << endl;
cout << "Direccion puntero: " << &puntero << endl << endl;

*puntero = 345;

cout << "Variable puntero: " << puntero << endl;
cout << "Variable puntero: " << *puntero << endl;
cout << "Direccion puntero: " << &puntero << endl << endl;

// Ahora las mostramos por pantalla:
cout << "Variable pruebaInt: " << pruebaInt << endl;
cout << "Direccion pruebaInt: " << &pruebaInt << endl << endl;

*punteroNuevo = devuelve(puntero,34);

cout << " Tras llamada: " << endl;
cout << "Variable puntero: " << punteroNuevo << endl;
cout << "Variable puntero: " << *punteroNuevo << endl;
cout << "Direccion puntero: " << &punteroNuevo << endl << endl;

return 0;
}

int devuelve (int *punteroInt, int entero) {
cout << "Variable param. puntero: " << punteroInt << endl;
cout << "Variable param. puntero: " << *punteroInt << endl;
cout << "Direccion param. puntero: " << &punteroInt << endl << endl;

return (*punteroInt) + entero;
} 
new y delete
Con las instrucciones new y delete podemos reservar y liberar espacio libre de memoria. Se utilizan con los punteros (ademas de los objetos) y es muy necesario liberar siempre la memoria con la instruccion delete para evitar memory leaks: espacio de memoria marcados como okupados pero que ya no se usan porque el puntero que les correspondia ahora apunta a otro lado.
/**
* Puntero.cpp
* 
* Clase que muestra la okupacion/liberacion de memoria con new y delete
* Pello Xabier Altadill Izura
* Compilar: g++ Puntero.cpp -o Puntero
*/

#include <iostream.h>

int main () {

// Creamos varias variables:
int *pruebaInt = new int;
short *pruebaShort = new short;

pruebaInt = 777;
pruebaShort = 23;

// Ahora las mostramos por pantalla:
cout << "Variable pruebaInt: " << pruebaInt << endl;
cout << "Direccion pruebaInt: " << &pruebaInt << endl << endl;

cout << "Variable pruebaShort: " << pruebaShort << endl;
cout << "Direccion pruebaShort: " << &pruebaShort << endl << endl;

// Liberamos la memoria
delete pruebaInt;
delete pruebaShort;

// Contra la especulacion del sistema (operativo)
// volvemos a oKupar un espacio de memoria
int *pruebaInt = new int;
short *pruebaShort = new short;

pruebaInt = 666;
pruebaShort = 21;

// quiza tengamos un error, pero se puede comprobar:
if ( pruebaInt == NULL || pruebaShort == NULL ) {
 cout << "Error al reservar memoria" << endl;
 return 0;
}

// Ahora las mostramos por pantalla:
cout << "Variable pruebaInt: " << pruebaInt << endl;
cout << "Direccion pruebaInt: " << &pruebaInt << endl << endl;

cout << "Variable pruebaShort: " << pruebaShort << endl;
cout << "Direccion pruebaShort: " << &pruebaShort << endl << endl;

return 0;
}


Objetos y punteros Se pueden crear punteros a objetos y atributos que son punteros. Veamos este ejemplo de una clase llamada Objeto:
/**
* Objeto.hpp
* 
* Clase que muestra distintos tipos de punteros
* que se usan con los objetos
*
* Pello Xabier Altadill Izura
*/

#include <iostream.h>

// Inicio de la clase
class Objeto {
private:
	int *privado;
public:
	int atributo;

	// Constructor
	Objeto();

        // Constructor
        Objeto(int atributo);

	// Destructor
	~Objeto();

	// Menu tipo case
	int devuelveAlgo();

};
Y su implementacion:
/**
* Objeto.cpp
* 
* Clase que muestra distintos tipos de punteros
* que se usan con los objetos
* Pello Xabier Altadill Izura
* Compilar: g++ Objeto.cpp -o Objeto
*/

#include "Objeto.hpp"

	// Constructor
	Objeto::Objeto(){
		atributo = 666;
	}

	// Constructor
	Objeto::Objeto(int atributo){
		this->atributo = atributo;
	}

	// Destructor
	Objeto::~Objeto(){}

	// Menu tipo case
	int Objeto::devuelveAlgo(){
		int temp = 0;
		return temp;
	}

int main () {

// Aqui guardaremos el resultado
int resultado = 0;

cout << " Vamos a jugar con los objetos." << endl;

// Creamos la instancia del objeto puntero
Objeto objeto = Objeto();

//Creamos un puntero a ese objeto,
// pero cuidado, no asignarle un constructor directamente
Objeto *objetopuntero;

// esto si...
objetopuntero = &objeto;

// Invocamos los metodos
resultado = objeto.devuelveAlgo();

// Observese la diferencia al acceder al atributo publico:
cout << " El valor de atributo con Objeto es: " << objeto.atributo << endl;
cout << " El valor de atributo con Objeto es: " << objetopuntero->atributo << endl;

//return 0;
}


11 comments |  PELMAlink |  3178 reads
0 of 0
make a comment
Comments
#1 otwrXbthKHNJNcpAPZi user avatar says:
www.myinsurersite.net/ car insurance quotes 97158 www.insurwebsite.com/ state auto insurance uysbe www.insurlist.net/ car insurance quotes 1775 www.insurersmates.com/ auto insurance 954
+-0 of 0
in May 12, 2011, 5:48 am
#2 NbdXGWcTBNQPhKH user avatar says:
+-0 of 0
in May 12, 2011, 6:44 am
#3 WOzqqiqwt user avatar says:
www.getcarinsur.com/ online auto insurance quotes 8-))) www.autoinsuranceadviser.net/ auto insurance 630 www.homeinsuronline.com/ home insurance gsgwym
+-0 of 0
in May 13, 2011, 1:48 pm
#4 JhKpXnWyH user avatar says:
www.bestallinsurers.com/ cheap car insurance =)) www.insurersguidesite.com/ free car insurance quotes 79434 www.insurlistonline.com/ auto insurance quotes :-((( www.insurersmates.com/ nj car insurance =-DD
+-0 of 0
in May 15, 2011, 11:07 am
#5 spotingbet user avatar says:
www.pello.info is very interesting !

sportingbet aus
+-0 of 0
in June 1, 2011, 9:00 am
#6 buyecigarette user avatar says:
www.pello.info is super, bookmarked!
electronic cigarette store
+-0 of 0
in June 11, 2011, 1:01 pm
#7 bestbettingsite user avatar says:
www.pello.info is my top 1 site now!
best betting sites
+-0 of 0
in June 26, 2011, 7:27 am
#8 buyroids user avatar says:
www.pello.info is interesting !
protein supplements
prohormones
+-0 of 0
in July 10, 2011, 3:49 am
#9 samihow user avatar says:
I solidly acknowledge that the knowledge granted is strongly related just about every person . Thanks .
fort lauderdale locksmith
Milpitas locksmith
irvine ca locksmith
OK
+-0 of 0
in July 13, 2011, 5:43 pm
#10 ronalddo user avatar says:
viagra asdasdas viagra 1232 viagra 1232 viagra 1232 cialis 1232 cialis 1232 1232 generic viagra 1232423423 cialis 1232 buy cialis 56465 viagra online asdjaksdn buy viagra asdj cheap viagra asdjaksdn buy viagra online asdjaksdn cheap viagra asdjaksdn buy cialis 64654 viagra online without prescription
viagra asdasdas viagra online fsde cheap viagra fsde buy viagra fsde viagra 665445 viagra 1232 viagra 1232 viagra online without prescription 553434 viagra online without prescription 65456 buy cialis 9876 cialis 1232 cialis 1232 cialis 1232 viagra 1232 generic viagra 1232 buy cialis cialis 5345 cialis 543543 phentermine without prescription 66544 phentermine without prescription 7766 cialis 5345 cialis 543543 cheap viagra fsde viagra online without prescription
+-0 of 0
in August 10, 2011, 12:08 am
Show all fields