| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
masBecas Lt

Registrado: 23 Oct 2003Mensajes: 98Ubicación: La Laguna, Tenerife
|
Publicado: Vie 16 Ene, 2004 8:29 pm Asunto: Constructor por defecto con arrays |
|
|
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 |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Vie 16 Ene, 2004 10:00 pm Asunto: |
|
|
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 |
|
 |
masBecas Lt

Registrado: 23 Oct 2003Mensajes: 98Ubicación: La Laguna, Tenerife
|
Publicado: Dom 18 Ene, 2004 12:40 pm Asunto: |
|
|
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 |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Dom 18 Ene, 2004 2:43 pm Asunto: |
|
|
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 |
|
 |
masBecas Lt

Registrado: 23 Oct 2003Mensajes: 98Ubicación: La Laguna, Tenerife
|
Publicado: Dom 18 Ene, 2004 3:10 pm Asunto: |
|
|
Nada, Ikis, q no lo veo.
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 |
|
 |
|