Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Duda con una funcion

Estas en el tema de Duda con una funcion en el foro de C/C++ en Foros del Web. Hola, hace poco empecé a programar en C++, hace muy poco diría yo ( ya he programado bastante en Java ). Pues prácticando un poco ...
  #1 (permalink)  
Antiguo 22/10/2012, 02:18
 
Fecha de Ingreso: octubre-2012
Mensajes: 7
Antigüedad: 11 años, 6 meses
Puntos: 0
Duda con una funcion

Hola, hace poco empecé a programar en C++, hace muy poco diría yo ( ya he programado bastante en Java ).
Pues prácticando un poco hice un programa tonto como este:


#include <iostream>
#include <string>
using namespace std;

class CuentaBancaria{
private:
string ID;
long saldo;
public:
CuentaBancaria(string id, long saldo);
void IngresarSaldo (long cantidad){this->saldo += cantidad;}
void SustraerSaldo (long cantidad){this->saldo -= cantidad;}
void IntercambiarSaldo(CuentaBancaria cuenta1, long cantidad);
long GetSaldo(){return this->saldo;}

};
CuentaBancaria::CuentaBancaria(string id, long saldo){
ID = id;
this->saldo = saldo;
}
void CuentaBancaria::IntercambiarSaldo(CuentaBancaria cuenta1, long cantidad){
this->saldo += cantidad;
cuenta1.saldo -= cantidad;

}
void main(){
CuentaBancaria Jose = CuentaBancaria("100593", 2000);
CuentaBancaria Chema = CuentaBancaria ("100000", 2000);
Jose.IngresarSaldo(1000);
Chema.SustraerSaldo(1000);
Jose.IntercambiarSaldo(Chema, 1000);
cout<< "El saldo de la cuenta Jose es : " << Jose.GetSaldo() <<endl;
cout<< "El saldo de la cuenta Chema es : " << Chema.GetSaldo() <<endl;
}



Al ejecutarlo, me doy cuenta de que la función IntercambiarSaldo, me ingresa el saldo en la cuenta desde la que llamo a la función, pero no me lo sustrae en la otra cuenta.

En este caso, me añade 1000 a la cuenta "Jose" pero no me lo sustrae de la cuenta "Chema" .

Por lo que al ejecutar me queda que tengo 4000 de saldo en la cuenta "Jose" mientras que 1000 en la cuenta "Chema". Cuando debería ser 4000 y 0 respectivamente.
  #2 (permalink)  
Antiguo 22/10/2012, 03:16
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Duda con una funcion

Estas desreferenciando la cuenta que envias a 'IntercambiarSaldo', de forma que se duplican los datos y la operacion se hace solamente en el duplicado, no en que tienes en el main; dicho de otra forma, cuando envias una desreferencia de Chema se crea Chema_paralelo y las operaciones se hacen sobre ese y no sobre el original. Tienes que enviar un puntero a la cuenta para que trabaje sobre los datos que tienes en el ambito del main:

Código:
//el prototipo
void IntercambiarSaldo(CuentaBancaria *, long );

//la funcion
void CuentaBancaria::IntercambiarSaldo(CuentaBancaria *cuenta1, long cantidad) {
    this->IngresarSaldo(cantidad);
    cuenta1->SustraerSaldo(cantidad);
}

//y la llamada a la funcion
Jose.IntercambiarSaldo(&Chema, 1000);
Una cosa, la entrada a la aplicacion tiene que ser de tipo int y retornar un entero a modo de codigo de error (0 cuando todo ok):

Código:
int main() {
    ...
    return 0;
}
Otra cosa, los tipos long pueden guardar datos hasta (+-)2147483647, este banco será para millonarios no? :)

Saludos
vosk

Etiquetas: funcion, int, programa, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:09.