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

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Re: [C++] Sobrecarga de Operadores en: 17 Septiembre 2016, 17:20 pm
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  Programación / Programación C/C++ / Re: [C++] Sobrecarga de Operadores en: 17 Septiembre 2016, 16:54 pm
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 / Programación C/C++ / [C++] Sobrecarga de Operadores en: 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
  1. //Definición de la clase Array con operadores sobrecargados.
  2.  
  3. #ifndef ARRAY_H
  4. #define ARRAY_H
  5.  
  6. #include <iostream>
  7. using std::ostream;
  8. using std::istream;
  9.  
  10. class Array
  11. {
  12. friend ostream &operator<<( ostream &, const Array & );
  13. friend istream &operator>>( istream &, Array & );
  14. friend Array& operator +(const Array &a1,const Array &a2);
  15. public:
  16. Array( int = 10 );
  17. Array( const Array & );
  18. ~Array();
  19. int getTamanio() const;
  20.  
  21. const Array &operator=( const Array & );
  22. bool operator==( const Array & ) const;
  23. bool operator!=( const Array &derecho )
  24. {
  25. return ! ( *this == derecho );
  26. }
  27.  
  28. int &operator[]( int );
  29.  
  30. int operator[]( int ) const;
  31. private:
  32. int tamanio;
  33. int *ptr;
  34. };
  35.  
  36. #endif
  37.  

Código
  1. //Definiciones de las funciones miembro y friend de la clase Array.
  2.  
  3. #include <iostream>
  4. using std::cerr;
  5. using std::cout;
  6. using std::cin;
  7. using std::endl;
  8.  
  9. #include <iomanip>
  10. using std::setw;
  11.  
  12. #include <cstdlib>
  13. using std::exit;
  14.  
  15. #include "Array.h"
  16.  
  17. Array::Array( int tamanioArreglo )
  18. {
  19. tamanio = ( tamanioArreglo > 0 ? tamanioArreglo : 10 );
  20. ptr = new int[ tamanio ];
  21.  
  22. for ( int i = 0; i < tamanio; i++ )
  23. ptr[ i ] = 0;
  24. }
  25.  
  26. Array::Array( const Array &arregloACopiar )
  27. : tamanio( arregloACopiar.tamanio )
  28. {
  29. ptr = new int[ tamanio ];
  30.  
  31. for ( int i = 0; i < tamanio; i++ )
  32. ptr[ i ] = arregloACopiar.ptr[ i ];
  33. }
  34.  
  35. Array::~Array()
  36. {
  37. delete [] ptr;
  38. }
  39.  
  40. int Array::getTamanio() const
  41. {
  42. return tamanio;
  43. }
  44.  
  45. const Array &Array::operator=( const Array &derecho )
  46. {
  47. if ( &derecho != this )
  48. {
  49. 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
  50. {
  51. delete [] ptr;
  52. tamanio = derecho.tamanio;
  53. ptr = new int[ tamanio ];
  54. }
  55.  
  56. for ( int i = 0; i < tamanio; i++ )
  57. ptr[ i ] = derecho.ptr[ i ];
  58. }
  59.  
  60. return *this;
  61. }
  62.  
  63. bool Array::operator==( const Array &derecho ) const
  64. {
  65. if ( tamanio != derecho.tamanio )
  66. return false;
  67.  
  68. for ( int i = 0; i < tamanio; i++ )
  69. if ( ptr[ i ] != derecho.ptr[ i ] )
  70. return false;
  71.  
  72. return true;
  73. }
  74.  
  75. int &Array::operator[]( int subindice )
  76. {
  77. if ( subindice < 0 || subindice >= tamanio )
  78. {
  79. cerr << "\nError: subindice " << subindice
  80. << " fuera de rango" << endl;
  81. exit( 1 );
  82. }
  83.  
  84. return ptr[ subindice ];
  85. }
  86.  
  87. int Array::operator[]( int subindice ) const
  88. {
  89. if ( subindice < 0 || subindice >= tamanio )
  90. {
  91. cerr << "\nError: subindice " << subindice
  92. << " fuera de rango" << endl;
  93. exit( 1 );
  94. }
  95.  
  96. return ptr[ subindice ];
  97. }
  98.  
  99. istream &operator>>( istream &entrada, Array &a )
  100. {
  101. for ( int i = 0; i < a.tamanio; i++ )
  102. entrada >> a.ptr[ i ];
  103.  
  104. return entrada;
  105. }
  106.  
  107. ostream &operator<<( ostream &salida, const Array &a )
  108. {
  109. int i;
  110.  
  111. for ( int i = 0; i < a.tamanio; i++ )
  112. {
  113. salida << setw( 12 ) << a.ptr[ i ];
  114.  
  115. if ( ( i + 1 ) % 4 == 0 )
  116. salida << endl;
  117. }
  118.  
  119. if ( i % 4 != 0 )
  120. salida << endl;
  121.  
  122. return salida;
  123. }
  124.  
  125. Array& operator +(const Array &a1,const Array &a2)
  126. {
  127.    Array b;
  128.  
  129.    for ( int i = 0; i < b.tamanio; i++ )
  130.    {
  131.    b.ptr[i] = a1.ptr[i] + a2.ptr[i];
  132.    }
  133.  
  134.    return b;
  135. }

Código
  1. //Programa de prueba de la clase Array.
  2.  
  3. #include <iostream>
  4. using std::cout;
  5. using std::cin;
  6. using std::endl;
  7.  
  8. #include "Array.h"
  9.  
  10. int main()
  11. {
  12. Array enteros1( 5 ); //Estos numeros se modifican como quieras pero al final deben ser iguales para poder realizar la suma
  13. Array enteros2(5);
  14.  
  15. cout << "El tamanio del objeto Array enteros1 es "
  16. << enteros1.getTamanio()
  17. << "\nEl objeto Array despues de la inicializacion es:\n" << enteros1;
  18.  
  19. cout << "\nEl tamanio del objeto Array enteros2 es "
  20. << enteros2.getTamanio()
  21. << "\nEl objeto Array despues de la inicializacion es:\n" << enteros2;
  22.  
  23. cout << "\nIntroduzca 17 enteros:" << endl;
  24. cin >> enteros1 >> enteros2;
  25.  
  26. cout << "\nDespues de la entrada, los objetos Array contienen:\n"
  27. << "enteros1:\n" << enteros1
  28. << "enteros2:\n" << enteros2;
  29.  
  30. cout << "\nEvaluando: enteros1 != enteros2" << endl;
  31.  
  32. if ( enteros1 != enteros2 )
  33. cout << "enteros1 y enteros2 no son iguales" << endl;
  34.  
  35. Array enteros3( enteros1 );
  36.  
  37. cout << "\nEl tamanio del objeto Array enteros3 es "
  38. << enteros3.getTamanio()
  39. << "\nEl objeto Array despues de la inicializacion es:\n" << enteros3;
  40.  
  41. cout << "\nAsignando enteros2 a enteros1:" << endl;
  42. enteros1 = enteros2;
  43.  
  44.  
  45.  
  46. cout << "enteros1:\n" << enteros1
  47. << "enteros2:\n" << enteros2;
  48.  
  49.    Array enteros4(5);
  50.  
  51.    cout << enteros4.getTamanio();
  52.  
  53. enteros4 = enteros1 + enteros2; // El error debe estar aquí
  54.  
  55. cout << "enteros4:\n" << enteros4;
  56.  
  57. cout << "\nEvaluando: enteros1 == enteros2" << endl;
  58.  
  59. if ( enteros1 == enteros2 )
  60. cout << "enteros1 y enteros2 son iguales" << endl;
  61.  
  62. cout << "\nenteros1[5 es " << enteros1[ 5 ];
  63.  
  64. cout << "\n\nAsignando 1000 a enteros1[5]" << endl;
  65. enteros1[ 5 ] = 1000;
  66. cout << "enteros1:\n" << enteros1;
  67.  
  68. cout << "\nTrata de asignar 1000 a enteros1[15]" << endl;
  69. enteros1[ 15 ] = 1000;
  70.  
  71. return 0;
  72. }
4  Programación / Programación C/C++ / Re: [C++] Participar en proyectos en: 16 Enero 2014, 15:14 pm
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  Programación / Programación C/C++ / Re: [C++] Participar en proyectos en: 15 Enero 2014, 14:43 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  Programación / Programación C/C++ / [C++] Participar en proyectos en: 15 Enero 2014, 14:28 pm
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.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines