Menú

Mostrar Mensajes

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ú

Mensajes - Suji

#1
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.
#2
Vale, me da el siguiente error:

Severity   Code   Description   Project   File   Line   Suppression State
Warning   C4172   returning address of local variable or temporary: b (línea 134)

Creo que el problema es que estoy creando un objeto dentro de la función operator y no sé por qué pero no me deja.
#3
Programación C/C++ / [C++] Sobrecarga de Operadores
17 Septiembre 2016, 13:52 PM
Buenas estoy aprendiendo a sobrecargar operadores y estoy haciendo un ejercicio de un libro, el ejercicio funciona bien, pero le he añadido por mi cuenta una sobrecarga adicional, el operador +.

El problema que tengo es que me compila y me genera el programa correctamente pero se estropea cuando llega a mi sobrecarga. Según el debugger podría deberse a la sobrecarga del operador de asignación, pero no logro hacer funcionar esta parte:

enteros4 = enteros1 + enteros2;

¿Podriais decirme qué estoy haciendo mal y qué debería hacer para sobrecargar correctamente el Array?

Tened en cuenta que estoy aprendiendo, gracias de antemano.

Código (cpp) [Seleccionar]
//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


Código (cpp) [Seleccionar]
//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;
}


Código (cpp) [Seleccionar]
//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;
}
#4
Gracias por las respuestas, la verdad es que tengo nivel bajo, hice un juego para barajar cartas hace poco del libro de Deitel sexta edicion, con ordenamiento aleatorio. Pero por mi cuenta he hecho pocas cosas, también he hecho el Pacman copiandomelo gracias a los videos de youtube de deividcoptero. Miraré los videos de minidosis, porque no me he enterado de los de USACO.

#5
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.

Esta interesante, me acabo de registrar,vere que hacer.
#6
Buenas a todos, hace poco que me he leído un libro para aprender a programar y más o menos me he enterado de lo que decía, el problema es que no he hecho ejercicios por mi cuenta, y estoy verde a la hora de programar en C++. Me gustaría participar en algún proyecto de C++ si puede ser en consola para poner en práctica los conocimientos básicos del lenguaje.

¿Conocéis algún proyecto en marcha? O alguna web de proyectos (si está en inglés no pasa nada, más o menos me defiendo en el idioma). También he estado viendo Allegro y Qt, pero solo viéndolo ya que no tengo ni idea.