es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Añadiendo los valores de dos pilas del mismo tamaño.

“Estoy practicando la creación de una clase de pila y estoy tratando de sobrecargar los operadores operator= y operator+. Hasta ahora he sobrecargado con éxito el operator=.

Supongamos que mi objetivo es poder realizar la operación st3 = st1 + st2; en el programa principal, donde st1, st2 y st3 son objetos de la clase pila y se asume que todos tienen el mismo tamaño y son valores enteros.

En este momento, st3 no está devolviendo ningún valor.

En mi clase tengo:

stack& operator+(stack& otherStack){
        int sum = 0;
        stack res;
        while ((!this->isEmpty()) && (!otherStack.isEmpty())) {
            sum = this->top() + otherStack.top();
            res.push(sum);
            this->pop();
            otherStack.pop();
        }
        return res;
    }

Y aquí está mi función print() utilizando la recursión que también está en la clase de la pila. Imprime st1 y st2 muy bien:

void printStack(){
if (isEmpty())
return;
int x = this->top();
this->pop();
this->printStack();
this->push(x);
}

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para hacer que st3 = st1 + st2 funcione, es necesario modificar la función operator+ para que pase res como referencia (stack& res) para devolver la suma de las dos pilas. Además, es necesario cambiar el tipo de retorno de operator+ de stack a stack&, ya que se desea modificar st3 directamente.

    Aquí está la implementación actualizada de operator+:

    “`c++
    stack& operator+(stack& otherStack){
    int sum = 0;
    stack& res = *new stack(); // crear un nuevo objeto stack en el heap
    while ((!isEmpty()) && (!otherStack.isEmpty())) {
    sum = top() + otherStack.top();
    res.push(sum);
    pop();
    otherStack.pop();
    }
    return res;
    }


    Observe que es necesario asignar un nuevo objeto `stack` en el heap utilizando el operador `new` y devolver su referencia. Esto evitará devolver una copia del objeto `stack` y prevenir fugas de memoria. Finalmente, en la función principal, se pueden utilizar los operadores sobrecargados `operator+` y `operator=` de la siguiente manera: ```c++ stack st1, st2, st3; // agregar algunos elementos a st1 y st2 st3 = st1 + st2; // sobrecarga de operator+ st3.printStack(); // imprimir el contenido de st3

Comments are closed.