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:
#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);
}
Nota inicial: Usa las etiquetas GeSHi para poner el código, gracias.
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:
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.
#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.