[ Foro de C++ ]

(C++) Utilice la clase arreglo para adicionar el método concatenar

30-Aug-2020 23:30
Invitado (jose342)
2 Respuestas

Hola tengo un pequeño ejercicio en c++ poo, donde debo crear un metodo que me permita concatenar dos arreglos. La explicación del ejercicio es:
"El método concatenar une dos arreglos para retornar un arreglo que contenga los datos de los dos"
Y hasta ahí lo entiendo, el problema es al momento de implementar, que me pierdo muchísimo.
Se me entregó el prototipo de la función y que es: "arreglo concatenar(const arreglo &) const;" y el ejemplo del llamado al método: "C = A.concatenar(B);"

Entonces, esto es lo que llevo del código:
main.cpp---------------------------------------------------------------------------------
#include "arreglo.h"

int main()
{
 arreglo A(5), B, C;
 cout << "\n** Primer arreglo ***\n";
 cin >> A;
 cout << "\n** Segundo arreglo ***\n";
 cin >> B;
 C = A;
 cout << "\n** Tercer arreglo ***\n";
 cout << C;
 if (A == C)
   cout << "\n\nA es igual a C";
 cout << "\n\n";
 return 0;
}

arreglo.cpp-----------------------------------------------------------------------------------
#include "arreglo.h"

arreglo arreglo::concatenar(const arreglo &a) const
{
 const t1,t2;
 t1=a
 
}


arreglo::arreglo(int ta)
{
 tam = (ta > 0 ? ta : 4);
 ptr = new int[tam];
 for(int i = 0; i < tam; i++)
   ptr[i] = 0;
}

arreglo::arreglo(const arreglo &copia)
{
 tam = copia.tam;
 ptr = new int[tam];
 for(int i = 0; i < tam; i++)
   ptr[i] = copia.ptr[i];
}

arreglo::~arreglo()
{
 delete []ptr;
}

int arreglo::tamanio() const
{
 return tam;
}

const arreglo &arreglo::operator= (const arreglo &derecha)
{
 if(&derecha != this)
 {
   if(tam != derecha.tam)
   {
     delete []ptr;
     tam = derecha.tam;
     ptr = new int[tam];
   }
   for(int i = 0; i < tam; i++)
     ptr[i] = derecha.ptr[i];
 }
 return *this;
}

int arreglo::operator== (const arreglo &derecha) const
{
 if(tam != derecha.tam)
   return 0;
 for(int i = 0; i < tam; i++)
   if(ptr[i] != derecha.ptr[i])
     return 0;
 return 1;
}

istream &operator>>(istream &entrada, arreglo &a)
{
 for(int i = 0; i < a.tam; i++)
 {
   cout << "[" << i+1 << "]: ";
   entrada >> a.ptr[i];
 }
 return entrada;
}

ostream &operator<<(ostream &salida, const arreglo &a)
{
 int i;
 for(i = 0; i < a.tam; i++)
 {
   salida << ", " << a.ptr[i];
   if((i+1) % 4 == 0) salida << endl;
 }
 if((i+1) % 4 == 0) salida << endl;
 return salida;
}

arreglo.h-----------------------------------------------------------------------------------------
#ifndef ARREGLO_H
#define ARREGLO_H

#include <iostream>
using namespace std;

class arreglo
{
 friend ostream &operator << (ostream &, const arreglo &);
 friend istream &operator >> (istream &, arreglo &);
public:
 arreglo(int = 4);
 arreglo(const arreglo &);
 ~arreglo();
 int tamanio() const;
 const arreglo &operator= (const arreglo &);
 int operator== (const arreglo &) const;
 arreglo concatenar(const arreglo &) const;
 int operator!= (const arreglo &derecha) const
 {
   return !(*this == derecha);
 }
private:
 int tam;
 int *ptr;
};

#endif // ARREGLO_H

Entonces, como pueden notar intenté implementar el método en el archivo arreglo.cpp y mi idea principal era hacer algo del estilo:
a=b+c
a=concatenar

Sí, algo muy simple pero eso fue lo que entendí del enunciado, entonces evidentemente no me corre, porque algo falta allí, pero no sé qué es....


01-Sep-2020 14:35
Julián Alzola Zarate

Hola, te pregunto: ¿desarrollaste todo este código y ahora lo intentás correr? (tengo una idea a eso si fue así)


02-Sep-2020 14:53
Julián Alzola Zarate

Hola, esto tampoco corre pero al intentar compilar va diciendo de forma más simple que es lo que está mal.

Saludos.

--------------------

#include <cstdlib>
#include <iostream>

using namespace std;

class arreglo
{
friend ostream &operator << (ostream &, const arreglo &);
friend istream &operator >> (istream &, arreglo &);
public:
arreglo(int = 4);
arreglo(const arreglo &);
~arreglo();
int tamanio() const;
const arreglo &operator= (const arreglo &);
int operator== (const arreglo &) const;
arreglo concatenar(const arreglo &) const;
int operator!= (const arreglo &derecha) const
{
  return !(*this == derecha);
}
private:
int tam;
int *ptr;
};

arreglo arreglo::concatenar(const arreglo &a) const
{
const t1,t2;
t1=a

}


arreglo::arreglo(int ta)
{
tam = (ta > 0 ? ta : 4);
ptr = new int[tam];
for(int i = 0; i < tam; i++)
  ptr[i] = 0;
}

arreglo::arreglo(const arreglo &copia)
{
tam = copia.tam;
ptr = new int[tam];
for(int i = 0; i < tam; i++)
  ptr[i] = copia.ptr[i];
}

arreglo::~arreglo()
{
delete []ptr;
}

int arreglo::tamanio() const
{
return tam;
}

const arreglo &arreglo::operator= (const arreglo &derecha)
{
if(&derecha != this)
{
  if(tam != derecha.tam)
  {
    delete []ptr;
    tam = derecha.tam;
    ptr = new int[tam];
  }
  for(int i = 0; i < tam; i++)
    ptr[i] = derecha.ptr[i];
}
return *this;
}

int arreglo::operator== (const arreglo &derecha) const
{
if(tam != derecha.tam)
  return 0;
for(int i = 0; i < tam; i++)
  if(ptr[i] != derecha.ptr[i])
    return 0;
return 1;
}

istream &operator>>(istream &entrada, arreglo &a)
{
for(int i = 0; i < a.tam; i++)
{
  cout << "[" << i+1 << "]: ";
  entrada >> a.ptr[i];
}
return entrada;
}

ostream &operator<<(ostream &salida, const arreglo &a)
{
int i;
for(i = 0; i < a.tam; i++)
{
  salida << ", " << a.ptr[i];
  if((i+1) % 4 == 0) salida << endl;
}
if((i+1) % 4 == 0) salida << endl;
return salida;
}

int main()
{
arreglo A(5), B, C;
cout << "\n** Primer arreglo ***\n";
cin >> A;
cout << "\n** Segundo arreglo ***\n";
cin >> B;
C = A;
cout << "\n** Tercer arreglo ***\n";
cout << C;
if (A == C)
  cout << "\n\nA es igual a C";
cout << "\n\n";
return 0;
}






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)