lunes, 5 de noviembre de 2012

C++ Punteros

Dado un objeto "p1" definido con la clase TCoordenada :

  • TCoordenada p1;

Definimos un puntero a dicho objeto :

  • TCoordenada *ptr1 = &p1;

Con el puntero podemos acceder a los miembros del objeto "p1" de dos formas equivalentes:

ptrl->x = 1;
(*ptrl).x = 1;  

En la segunda forma usamos el operador de desreferencia  *  que da el objeto al que apunta el puntero.

Sería un error de sintaxis *(ptrl.x).

C++ Clases

En programación orientada a objetos, las clases se utilizan como plantilla para construir objetos de ese tipo.
Poo : encapsula datos y funciones en estructuras llamadas clases, para modelar el mundo real.
La clase (TCoordenada) se puede instanciar como:
    • objeto :   TCoordenada objetoP1;
    • array :       TCoordenada arrayP2[10];
    • puntero :  TCoordenada *ptrP3 = &objetoP1;
    • referencia : TCoordenada &refP4 = objetoP1;

Ejemplo de definición de una clase, funciones inline para el input, funciones de parametro cero para el output y funciones sobrecarga para la impresión de resultados :

/* 
* defclases.cpp
* Definición y usos de clases 
* by Oscar Romero
* compilado : g++ defclasses.cpp -o defclasses
*/

#include <iostream> //Añade encabezado de flujo entrada salida
using namespace std; //permiso para acceso al espacio de nombres std

class TCoordenada  //Definicion de la clase

{

public:          //Permite acceder a los datos desde la función main
 void setX(int xx) {x = xx;}  //Funciones para el input en el main
 void setY(int yy) {y = yy;}  //Son funciones inline 
 void setZ(int zz) {z = zz;}  //inline = codigo dentro declaracion
 int getX(void) {return x;}   //Funciones para el output en el main
 int getY(void) {return y;}   //Funciones parámetro cero, sin argumentos
 int getZ(void) {return z;}
  void imprimir(void)  //Funcion de sobrecarga para el output
  {
   cout << "(" << x << ", " << y << ", " << z << ")" << endl;
  }

 private:       //Permite reservar datos para uso interno de la clase

 int x, y, z; 
};

int

main(void)
{
 int i; //Declaracion variable entera
 TCoordenada p1; //Instancia de la clase TCoordenada en el objeto p1
 p1.setX(1); //Usa las funciones de input para meter datos en la clase
 p1.setY(2);
 p1.setZ(3);
 p1.imprimir(); //LLama la funcion de sobrecarga de la clase TCoordenada
return 0;
}