Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 19-04-2009
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Hola, Negriz.

El problema de los punteros en C crea algún quebradero de cabeza a más de uno. Los punteros son una herramienta muy poderosa a la par que peligrosa para la estabilidad de un programa, de forma que es muy conveniente entenderlos bien. Si sabemos usarlos, nos proporcionarán muchas satisfacciones. Voy a tratar de resumir y explicar los aspectos más importantes para este caso particular.

1. El primer concepto a tener presente: Un puntero representa la dirección de memoria de lo que apunta, y el tipo del puntero es el tipo del objeto o variable apuntada.

2. Podemos tener punteros a cualquier cosa, incluidos punteros a punteros.

3. Un array, se representa por un puntero al primer elemento, y podemos tener arrays de cualquier cosa y representarlo por un puntero.

4. Podemos aplicar la aritmética de punteros. Si sumamos un entero a un puntero, obtenemos un puntero al siguiente elemento del array que representa ese puntero. La resta funciona igual. La aritmética es sensible al tipo de puntero, como es lógico.

5. El índice de un array aplicado al puntero devuelve el elemento indexado. Con la aritmética de punteros, la suma del indice al puntero, es un puntero a ese elemento indexado, pero no el propio elemento, que será el valor del puntero. De esta manera esto es cierto: vector[i] == *(vector+i)

En tu caso, para definir un array de TCheckBox, tienes que tener en cuenta que un objeto de ese tipo es realmente un puntero, por eso lo tienes que crear con el operador new. Es decir, no tienes un objeto sino en realidad un puntero a dicho objeto. Para crear un array de cualquier objeto de las clases VCL, lo que en realidad necesitas es un array de punteros de dicho tipo.

Si int i es un entero, int *pi = &i es un puntero a un entero que es i. int **ppi = pi es un puntero a un puntero entero.

Si TCheckBox *test es un puntero a un TCheckBox, TCheckBox **Arraytest es un puntero a un puntero de tipo TCheckBox, o lo que es lo mismo, puede estar representando un array de punteros TCheckBox, que es lo que tu quieres. Ahora sólo tienes que reservar la memoria necesaria para el array de punteros y para esos punteros.

Dejémomos de royos y vamos al grano:

Código:
   // Crear el Array de TCheckBox
   int Count = 10;
   // reservo espacio para 10 punteros del tipo TCheckBox*
   TCheckBox **ArrayCB = new TCheckBox*[Count];

   // Creo los elementos del array y damos los valores necesarios...
   for(int i=0; i<Count; i++){
      ArrayCB[i] = new TCheckBox(this);
      ArrayCB[i]->Left = 5;
      ArrayCB[i]->Top = 25+(25*i);
      ArrayCB[i]->Caption = "TCheckBox " + IntToStr(i);
      InsertControl(ArrayCB[i]);
   }
Y, por supuesto, en algún momento habrá que destruirlo:

Código:
   // Destruir el Array
   // Destruyo los elementos
   for(int i=0; i<Count; i++){
      delete ArrayCB[i];
   }

   // Destruyo el Array de punteros
   delete [] ArrayCB;
Espero haber sido claro y poco aburrido.

Saludos.

PD. No te comenté que std::vector es un template que crea clases para dar funcionalidad a arrays. En el fondo es lo mismo que te esplique, pero con la facilidad de que una clase se encarga del trabajo de crear el array, reservar memoria, destruir, redimensionar el array.... Antes de usar esta facilidad conviene entender los fundamentos.

Última edición por escafandra fecha: 19-04-2009 a las 02:05:19.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Es posible crear una tabla de mysql desde delphi?!! Yasnet MySQL 4 19-12-2008 01:31:23
crear un tcheckbox con un skin aeff OOP 7 24-11-2008 13:57:24
¿Es posible crear un botón en el formulario en tiempo de ejecución? kakarotv5 OOP 19 24-09-2008 16:50:17
crear array Cosgaya Varios 3 10-02-2006 10:09:53
crear array de groupbox en tiempo de ejecución abogado Varios 1 21-03-2005 10:27:43


La franja horaria es GMT +2. Ahora son las 02:33:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi