elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda tonta con el error que no veo en el constructor.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda tonta con el error que no veo en el constructor.  (Leído 1,671 veces)
pitufocharly

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Ayuda tonta con el error que no veo en el constructor.
« en: 8 Julio 2014, 10:09 am »

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
  1. #include <iostream>
  2. #include <stdlib.h>
  3.  
  4. using namespace std;
  5. class Clase{
  6. private:
  7.    int *V;
  8.    int N;
  9.  
  10. public:
  11.            Clase(int n){
  12.        N=n;
  13.        V=new int [N];
  14.        for(int i=0;i<N;i++) V[i]=rand()%51;
  15.        return;
  16.    }
  17.    ~Clase(){
  18.        delete[]V;
  19.        return;
  20.    }
  21.    void mostrar(void){
  22.        for(int i=0;i<N;i++)cout<<V[i]<<"";
  23.        cout<<endl;
  24.        return;
  25.    }
  26.    Clase operator=(Clase m){
  27.        delete[]V;
  28.        N=m.N;
  29.        V=new int[N];
  30.        for(int i=0;i<N;i++)V[i]=m.V[i];
  31.        return(*this);
  32.    }
  33. };
  34. int main(void){
  35.    Clase m1(10),m2(20);
  36.    m1.mostrar();
  37.    m2.mostrar();
  38.    m2=m1;
  39.    m1.mostrar();
  40.    m2.mostrar();
  41.    cin.get();
  42.    return(0);
  43.  
  44. }


« Última modificación: 8 Julio 2014, 10:32 am por Eternal Idol » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Ayuda tonta con el error que no veo en el constructor.
« Respuesta #1 en: 8 Julio 2014, 10:29 am »

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

Código
  1. void mostrar(void){
  2.        for(int i=0;i<N;i++)cout<<V<<"";
  3.        cout<<endl;
  4.        return;
  5.    }

¿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
  1. void mostrar(void){
  2.        for(int i=0;i<N;i++)cout<<V[i]<<"";
  3.        cout<<endl;
  4.        return;
  5.    }

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
  1. #include <algorithm>
  2. #include <vector>
  3.  
  4. class Clase
  5. {
  6. private:
  7.  std::vector< int > elementos; // V no me dice absolutamente nada, mejor nombres descriptivos
  8.  
  9. public:
  10.  Clase(int numElementos // n tampoco me dice nada)
  11.  {
  12.    for ( int i = 0; i < numElementos; ++i )
  13.    {
  14.      // has inicializado el generador de numeros aleatorios en algun sitio?
  15.      elementos.push_back( rand( ) % 51 );
  16.    }
  17.  
  18.    // return; <<-- No es necesario
  19.  }
  20.  
  21.  ~Clase()
  22.  {
  23.    // delete[]V; <<-- Con la clase vector, esto ahora sobra
  24.    // return; <<-- No es necesario
  25.  }
  26.  
  27.  // En C++ no es necesario poner "void" cuando una funcion no tiene argumentos
  28.  void mostrar( )
  29.  {
  30.    for_each( elementos.begin( ), elementos.end( ), [](int elemento){ cout<< elemento <<" "; } );
  31.    cout<<endl;
  32.    // return; <<-- No es necesario
  33.  }
  34.  
  35.  // Es mejor que este operador devuelva una referencia, si no obligas a hacer una copia
  36.  // adicional del objeto, con el coste en tiempo y recursos que conlleva.
  37.  // Y lo mismo para el argumento de la funcion, es mejor pasar los "objetos" por referencia
  38.  // que por valor.
  39.  // El coste en este caso es muy bajo... pero es mejor adquirir buenas practicas desde el comienzo
  40.  const Clase& operator=( const Clase& m )
  41.  {
  42.    elementos = m.elementos; // Y ya esta, no necesitamos nada mas
  43.    return(*this);
  44.  }
  45. };

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


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines