Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

C++ Builder Fragen

chris02 / 2 Antworten / Baumansicht Nickles

Hallo zusammen,
hab mal zwei Fragen zum Borland C++ Builder.


1. Wie kann ich ein Array zur Laufzeit, also "dynamisch" erweitern. Geht das überhaupt mit einem normalen Array?
Also mal angenommen ich habe sowas:


class A
{
 int MeinArray[5];


 void ArrayErweitern(int x)
 {
  ???
 }  
}


Ich will also das die Methode "ArrayErweitern" das Array "MeinArray" um x viele Elemente erweitern. Aber wie mache ich das genau?


2. Wie erstelle ich zur Laufzeit ein Graphik Objekt, wie z.B. einen Button, oder ein Memo Feld?


Danke schonmal


Gruß


chris

bei Antwort benachrichtigen
mr.escape chris02 „C++ Builder Fragen“
Optionen

Eine lösung wäre:

class A
{
    int *MeinArray;
    int MeinArraySize, MeinArrayAlloc;//verwendete und vorhandene elemente
    A(){MeinArray=NULL;MeinArraySize=0;MeinArrayAlloc=0;}
    ~A(){if(MeinArray) delete[] MeinArray;}
    void ArrayErweitern(int x);
};

void A::ArrayErweitern(int x){
    MeinArrayAlloc+=x;
    int *tempArray=new int[MeinArrayAlloc];
    //hier sollte noch eine abfrage stehen ob "new" erfolgreich war
    memcpy(tempArray, MeinArray, MeinArraySize*sizeof(int));
    delete[] MeinArray;
    MeinArray=tempArray;
}


man muss halt buchhalten über die größe des arrays, am besten ganz tief in der klasse, damit diese verwaltung nur einmal getestet werden muss.
Es könnte ggf. auch templates aus der STL verwendung finden, da braucht es aber schon etwas einarbeitung.

mr.escape
"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
d-oli chris02 „C++ Builder Fragen“
Optionen

Hi,

1. Wie kann ich ein Array zur Laufzeit, also "dynamisch" erweitern. Geht das überhaupt mit einem normalen Array?
Mit der C standard library geht das so:

void * realloc ( void * memblock, size_t size );

Reallocate memory block.
The size of the block pointed to by memblock parameter is changed to the size in bytes specified, expanding or reducing the amount of memory accessible in that block.
The block could be moved to a new location in some cases, in this case the pointer returned by the function will point to the location. The content of the block will remain unchanged even if the block is moved and will be accessible from the new pointer.
In case that memblock is NULL the function behaves exactly as malloc assigning a new block of size bytes and returning a pointer to the beginning of it.
In case that size is 0 the memory previously allocated in memblock is deallocated and a NULL pointer is returned. Dynamic memory allocated with malloc, calloc and realloc should be freed using free once it is no longer needed.


#include <stdio.h>
#include <stdlib.h>

#define SIZE_1 4
#define SIZE_2 6

int main()
{
  int count;
  int *iArray = NULL;
  // Grösse 4
  iArray = ( int* )realloc( iArray, SIZE_1 * sizeof( int ) );
  // Array füllen
  for( count = 0; count < SIZE_1; count ++ )
  {
    iArray[ count ] = count + 1;
  }
  // Ausgabe
  for( count = 0; count < SIZE_1; count ++ )
  {
    printf( "iArray[ %i ] = %i\n", iArray[ count ], iArray[ count ] );
  }

  printf( "\n" );

  // Erweitern auf grösse 6
  iArray = ( int* )realloc( iArray, SIZE_2 * sizeof( int ) );
  // Array füllen
  for( count = ( SIZE_1 - 1 ); count < SIZE_2; count ++ )
  {
    iArray[ count ] = count + 1;
  }
  // Ausgabe
  for( count = 0; count < SIZE_2; count ++ )
  {
    printf( "iArray[ %i ] = %i\n", iArray[ count ], iArray[ count ] );
  }

  free( iArray );
  
  return 0;
}


2. Wie erstelle ich zur Laufzeit ein Graphik Objekt, wie z.B. einen Button, oder ein Memo Feld?
Ich kenne die den ( Borland ?) C++ - Builder nicht. Aber normalerweise wird ein Pointer der entsprechenden Klasse deklariert und mit new aloziert.

#define HEIGHT 12
#define WIDHT 120

button *TheButton;

TheButton = new button( HEIGHT, WIDHT, "OK" );

Gruss, d-oli
Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen