Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Constructor por defecto con arrays

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Constructor por defecto con arrays Responder citando

Alguien sabe cómo hacer que al reservar memoria para un array de objetos en lugar de usar el constructor por defecto se use otro?
Por ejemplo:

Código:

class TObjeto1 {
    int valor;
public:
   TObjeto1(int a) : valor(a) {}
};

int main() {
    TObjeto1 *obj[5];
    for (int i = 0; i < 5; i++)
        obj = new TObjeto[2];
}


La idea es que donde hago el "new" usara el constructor que he creado con parámetros.
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

Es fácil, solo sobreescribe el constructor

TObjeto1(int a) : valor(a) {}

TObjeto1(int a, int b);


al momento de hacer el new invocalo con

obj = new TObjeto(1,2);

y ya habras llamado al otro constructor, sea en un array o no.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

No sé si no me he explicado bien o no pillo tu solución.

El problema no viene por usar un constructor u otro con más o menos parámetros. El problema es que si intento inicializar un array de objetos
Código:

TObjeto1 *a = new TObjeto1[10];


Siempre me pilla el constructor por defecto. Y yo quiero usar otro constructor distinto, lo q pasa es q no me deja invocarlo. Lo he intentado de varias formas:
Código:

// Supongamos el constructor por defecto
TObjeto1() { valor = 0; }
// Y un constructor con parámetros
TObjeto1(int a) : valor(a) {}
// y quiero un array dinámico de 10 elementos pero usando el SEGUNDO
// Así que no me vale con poner
TObjeto1 *a = new TObjeto1[10];
// Pero tampoco lo siguiente pq no me compila
TObjeto1 *a = new TObjeto1[10](1);
// y otras pruebas semejantes que he intentado


No sé si se ve ahora más claro el problema
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

de la ayuda del Builder

Código:

// ALLOCATE A TWO-DIMENSIONAL SPACE, INITIALIZE, AND DELETE IT.

#include <exception>
#include <iostream>

using std::cout;
using std::endl;
void display(long double **);
void de_allocate(long double **);

int m = 3;                               // THE NUMBER OF ROWS.
int n = 5;                               // THE NUMBER OF COLUMNS.

int main(void) {
   long double **data;

   try {                                 // TEST FOR EXCEPTIONS.
      data = new long double*[m];        // STEP 1: SET UP THE ROWS.
      for (int j = 0; j < m; j++)

          data[j] = new long double[n];  // STEP 2: SET UP THE COLUMNS
      }
   catch (std::bad_alloc) {  // ENTER THIS BLOCK ONLY IF bad_alloc IS THROWN.
      // YOU COULD REQUEST OTHER ACTIONS BEFORE TERMINATING
      cout << "Could not allocate. Bye ...";
      exit(-1);
      }

   for (int i = 0; i < m; i++)
      for (int j = 0; j < n; j++)
          data[i][j] = i + j;            // ARBITRARY INITIALIZATION

   display(data);
   de_allocate(data);
   return 0;

   }

void display(long double **data) {
   for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++)
             cout << data[i][j] << " ";
       cout << "\n" << endl;
       }
   }

void de_allocate(long double **data) {
   for (int i = 0; i < m;  i++)
       delete[] data[i];                 // STEP 1: DELETE THE COLUMNS

   delete[] data;                        // STEP 2: DELETE THE ROWS

   }
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Nada, Ikis, q no lo veo. Sad

En el ejemplo q me has puesto lo único q se hace es una inicialización de un array bidimensional de la manera habitual:
Código:

int m = 5;
int n = 6;
TObjeto **a;
a = new TObjeto *[m];
for (int i = 0; i < m; i++)
    a[i] = new TObjeto[n];

Con eso no tengo problema. El problema viene de que haciendo una inicialización de esta manera siempre emplea el constructor por defecto del objeto "TObjeto", y yo quiero emplear un constructor distinto al que pueda pasar ciertos parámetros.
No quiero asignar los valores después sino usar un constructor en concreto de mi objeto.
Siento resultar tan pesado, sobre todo porque lo q quiero hacer es más una cuestión de comodidad q otra cosa (obviamente siempre puedo usar el constructor por defecto y después inicializar los objetos uno a uno con otra función creada a tal efecto). Gracias de todas formas por las molestias q t tomas en ayudarme.
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.