[C con Clase] Problema con Constructor Copia

John Loria tanyin21 en hotmail.com
Jue Nov 12 16:03:25 CET 2009


Hola Steven muchas gracias por tu respuesta, me ha servido de mucho 
abajo tengo las siguientes preguntas. Gracias

> >  Saludos compañeros, anteriormente habia puesto una consulta sobre el
> >  constructor copia en una lista, bueno ahora resulta que me puse hacer una
> >  "cola", pero sigo con dudas.
> >  En el siguiente codigo, no entiendo porque me da problema, lo que trato de
> >  hacer es un constructor copia que reciba dos instancias de la clase cola y
> >  que me inserte un dato, entiendo que si uso el metodo "Insertar" dentro de
> >  ese constructor copia deberia de llenarme la instancia con el dato que estoy
> >  poniendo, lo compilo y cuando lo corro me da un error de "segment default".
> >  No entiendo que es lo que pasa, estoy usando el IDE Codeblocks y el
> >  compilador de g++, lo que trato de hacer es llenar una nueva instancia con
> >  los datos de dos instancias pasadas por parámetro por medio de un
> >  constructor copia.

En primer lugar, no se habla de un constructor copia a aquel constructor que
reciba más de un objeto de la misma clase. En tu caso, el constructor copia
se declara como:

Cola( const Cola&ref );

Esto no significa que no puedas crear un constructor 'Cola()' que acepte dos
objetos de la clase 'Cola', pero no recomiendo llamarlo "constructor copia".

Comprendo, entonces el constructor copia es aquel que solo recibe una instancia de la misma clase objeto en la que esta, ¿como podría llamarle a un constructor que reciba dos instancias de ella misma?


#include<iostream>

> >
> >  using namespace std;
> >
> >  class Cola{
> >
> >      public:
> >
> >      Cola(){ultimo=NULL; primero=NULL; tamano=0;}
> >
> >      Cola(Cola&  cuno,Cola&  cdos){
> >          for(int v=0;v<=cuno.Pilatamano()-1;v++){
> >          Insertar(cuno.vector[v]);
> >          }
> >          for(int c=0;c<=cdos.Pilatamano()-1;c++){
> >          Insertar(cdos.vector[c]);
> >          }
> >          }
Deberías indicar que las referencias son a objetos constantes, ya que no 
tenemos ningún interés en modificar esas colas. El error que tienes es 
que no inicializas ni asignas valores iniciales a los datos miembro como 
las variables, 'ultimo', 'primero', y el contador del tamaño actual. 
Esto lo hiciste para el constructor sin parámetros, pero no para este 
constructor. Sin estos valores iniciales, la función 'Insertar()' no se 
ejecutará correctamente porque hace uso de los punteros.

Muchas gracias, al hacer este cambio ya se resolvió mi problema, ahora pregunto entonces ¿cada ves que haga un constructor distinto tengo que inicializar las variables para cada constructor?  o ¿se pueden inicializar una sola ves y que funcionen para todos los constructores que se hagan?

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20091112/f894d145/attachment.html>


Más información sobre la lista de distribución Cconclase