Ayuda tonta con el error que no veo en el constructor.

Iniciado por pitufocharly, 8 Julio 2014, 10:09 AM

0 Miembros y 1 Visitante están viendo este tema.

pitufocharly

Hola, el codigo me compila pero no se porque sale mal, creo que es algun fallo en el constructor pero no consigo verlo. Me podrian ayudar a solucionarlo, es un fallo muy tonto y si ple pero estoy empezando ahora en c++ y voy un poco perdido. Muchas gracias.

código:
Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>

using namespace std;
class Clase{
private:
   int *V;
   int N;

public:
           Clase(int n){
       N=n;
       V=new int [N];
       for(int i=0;i<N;i++) V[i]=rand()%51;
       return;
   }
   ~Clase(){
       delete[]V;
       return;
   }
   void mostrar(void){
       for(int i=0;i<N;i++)cout<<V[i]<<"";
       cout<<endl;
       return;
   }
   Clase operator=(Clase m){
       delete[]V;
       N=m.N;
       V=new int[N];
       for(int i=0;i<N;i++)V[i]=m.V[i];
       return(*this);
   }
};
int main(void){
   Clase m1(10),m2(20);
   m1.mostrar();
   m2.mostrar();
   m2=m1;
   m1.mostrar();
   m2.mostrar();
   cin.get();
   return(0);

}


eferion

Nota inicial: Usa las etiquetas GeSHi para poner el código, gracias.

Código (cpp) [Seleccionar]

void mostrar(void){
        for(int i=0;i<N;i++)cout<<V<<"";
        cout<<endl;
        return;
    }


¿Pretendes imprimir "N" veces el vector "V"? me da la sensación de que te falta indicar el elemento a mostrar en cada iteración del for:

Código (cpp) [Seleccionar]

void mostrar(void){
        for(int i=0;i<N;i++)cout<<V[i]<<"";
        cout<<endl;
        return;
    }


PD.: por qué no usas la clase "vector" en vez de un arreglo? ¿si es por practicar o por exigencias del ejercicio vale, en caso contrario no merece la pena complicarse la vida.

Código (cpp) [Seleccionar]

#include <algorithm>
#include <vector>

class Clase
{
private:
  std::vector< int > elementos; // V no me dice absolutamente nada, mejor nombres descriptivos

public:
  Clase(int numElementos // n tampoco me dice nada)
  {
    for ( int i = 0; i < numElementos; ++i )
    {
      // has inicializado el generador de numeros aleatorios en algun sitio?
      elementos.push_back( rand( ) % 51 );
    }

    // return; <<-- No es necesario
  }

  ~Clase()
  {
    // delete[]V; <<-- Con la clase vector, esto ahora sobra
    // return; <<-- No es necesario
  }

  // En C++ no es necesario poner "void" cuando una funcion no tiene argumentos
  void mostrar( )
  {
    for_each( elementos.begin( ), elementos.end( ), [](int elemento){ cout<< elemento <<" "; } );
    cout<<endl;
    // return; <<-- No es necesario
  }

  // Es mejor que este operador devuelva una referencia, si no obligas a hacer una copia
  // adicional del objeto, con el coste en tiempo y recursos que conlleva.
  // Y lo mismo para el argumento de la funcion, es mejor pasar los "objetos" por referencia
  // que por valor.
  // El coste en este caso es muy bajo... pero es mejor adquirir buenas practicas desde el comienzo
  const Clase& operator=( const Clase& m )
  {
    elementos = m.elementos; // Y ya esta, no necesitamos nada mas
    return(*this);
  }
};


Por cierto, deberías revisar los comentarios que he puesto en el código.