Vale ya lo he solucionado, al parecer habría que borrar el último trozo de código del main para que compilara bien. Se ha solucionado así xD. Muchas gracias.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú//Definición de la clase Array con operadores sobrecargados.
#ifndef ARRAY_H
#define ARRAY_H
#include <iostream>
using std::ostream;
using std::istream;
class Array
{
friend ostream &operator<<( ostream &, const Array & );
friend istream &operator>>( istream &, Array & );
friend Array& operator +(const Array &a1,const Array &a2);
public:
Array( int = 10 );
Array( const Array & );
~Array();
int getTamanio() const;
const Array &operator=( const Array & );
bool operator==( const Array & ) const;
bool operator!=( const Array &derecho )
{
return ! ( *this == derecho );
}
int &operator[]( int );
int operator[]( int ) const;
private:
int tamanio;
int *ptr;
};
#endif
//Definiciones de las funciones miembro y friend de la clase Array.
#include <iostream>
using std::cerr;
using std::cout;
using std::cin;
using std::endl;
#include <iomanip>
using std::setw;
#include <cstdlib>
using std::exit;
#include "Array.h"
Array::Array( int tamanioArreglo )
{
tamanio = ( tamanioArreglo > 0 ? tamanioArreglo : 10 );
ptr = new int[ tamanio ];
for ( int i = 0; i < tamanio; i++ )
ptr[ i ] = 0;
}
Array::Array( const Array &arregloACopiar )
: tamanio( arregloACopiar.tamanio )
{
ptr = new int[ tamanio ];
for ( int i = 0; i < tamanio; i++ )
ptr[ i ] = arregloACopiar.ptr[ i ];
}
Array::~Array()
{
delete [] ptr;
}
int Array::getTamanio() const
{
return tamanio;
}
const Array &Array::operator=( const Array &derecho )
{
if ( &derecho != this )
{
if ( tamanio != derecho.tamanio ) //Supuestamente el error está aquí según el debugger me dice: Array::operator=(this=0x7fffffffe350, derecho=...) 0x400db8 y después me dice main() 0x4014f4
{
delete [] ptr;
tamanio = derecho.tamanio;
ptr = new int[ tamanio ];
}
for ( int i = 0; i < tamanio; i++ )
ptr[ i ] = derecho.ptr[ i ];
}
return *this;
}
bool Array::operator==( const Array &derecho ) const
{
if ( tamanio != derecho.tamanio )
return false;
for ( int i = 0; i < tamanio; i++ )
if ( ptr[ i ] != derecho.ptr[ i ] )
return false;
return true;
}
int &Array::operator[]( int subindice )
{
if ( subindice < 0 || subindice >= tamanio )
{
cerr << "\nError: subindice " << subindice
<< " fuera de rango" << endl;
exit( 1 );
}
return ptr[ subindice ];
}
int Array::operator[]( int subindice ) const
{
if ( subindice < 0 || subindice >= tamanio )
{
cerr << "\nError: subindice " << subindice
<< " fuera de rango" << endl;
exit( 1 );
}
return ptr[ subindice ];
}
istream &operator>>( istream &entrada, Array &a )
{
for ( int i = 0; i < a.tamanio; i++ )
entrada >> a.ptr[ i ];
return entrada;
}
ostream &operator<<( ostream &salida, const Array &a )
{
int i;
for ( int i = 0; i < a.tamanio; i++ )
{
salida << setw( 12 ) << a.ptr[ i ];
if ( ( i + 1 ) % 4 == 0 )
salida << endl;
}
if ( i % 4 != 0 )
salida << endl;
return salida;
}
Array& operator +(const Array &a1,const Array &a2)
{
Array b;
for ( int i = 0; i < b.tamanio; i++ )
{
b.ptr[i] = a1.ptr[i] + a2.ptr[i];
}
return b;
}
//Programa de prueba de la clase Array.
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include "Array.h"
int main()
{
Array enteros1( 5 ); //Estos numeros se modifican como quieras pero al final deben ser iguales para poder realizar la suma
Array enteros2(5);
cout << "El tamanio del objeto Array enteros1 es "
<< enteros1.getTamanio()
<< "\nEl objeto Array despues de la inicializacion es:\n" << enteros1;
cout << "\nEl tamanio del objeto Array enteros2 es "
<< enteros2.getTamanio()
<< "\nEl objeto Array despues de la inicializacion es:\n" << enteros2;
cout << "\nIntroduzca 17 enteros:" << endl;
cin >> enteros1 >> enteros2;
cout << "\nDespues de la entrada, los objetos Array contienen:\n"
<< "enteros1:\n" << enteros1
<< "enteros2:\n" << enteros2;
cout << "\nEvaluando: enteros1 != enteros2" << endl;
if ( enteros1 != enteros2 )
cout << "enteros1 y enteros2 no son iguales" << endl;
Array enteros3( enteros1 );
cout << "\nEl tamanio del objeto Array enteros3 es "
<< enteros3.getTamanio()
<< "\nEl objeto Array despues de la inicializacion es:\n" << enteros3;
cout << "\nAsignando enteros2 a enteros1:" << endl;
enteros1 = enteros2;
cout << "enteros1:\n" << enteros1
<< "enteros2:\n" << enteros2;
Array enteros4(5);
cout << enteros4.getTamanio();
enteros4 = enteros1 + enteros2; // El error debe estar aquí
cout << "enteros4:\n" << enteros4;
cout << "\nEvaluando: enteros1 == enteros2" << endl;
if ( enteros1 == enteros2 )
cout << "enteros1 y enteros2 son iguales" << endl;
cout << "\nenteros1[5 es " << enteros1[ 5 ];
cout << "\n\nAsignando 1000 a enteros1[5]" << endl;
enteros1[ 5 ] = 1000;
cout << "enteros1:\n" << enteros1;
cout << "\nTrata de asignar 1000 a enteros1[15]" << endl;
enteros1[ 15 ] = 1000;
return 0;
}
Cita de: amchacon en 15 Enero 2014, 14:37 PM
Pasate por aquí:
http://foro.elhacker.net/programacion_cc/usaco_problemas_de_progamacion_para_practicar-t406686.0.html
Aunque quizas te guste hacer un proyecto por tú cuenta.