PDA

Visualizza la versione completa : [C++] Modifica campo non si riflette su oggetto originale


Lucked
13-06-2019, 13:04
ho creato un programma ad oggetti c++
la classe banca un vettore di clienti
solo che a differenza di java noto
che quando cambio il saldo a uno dei clienti
questo non si riflette sull'oggetto creato
in precedenza. E' come se esistessero due oggetti
diversi, uno fuori dal vettore e uno dentro.
come si spiega? il saldo del cliente2 rimane invariato a 1000.
ho fatto lo stesso programma in java, in cui invece trovo la variazione


#include <iostream>
using namespace std;


class cliente{
private:
int num_conto;
int saldo;
string nome;


public:
cliente(int c, int s, string n);
cliente();
int getSaldo();
void setSaldo(int s);
int getNum_conto();
};


class banca{
private:
cliente vett[3];
int pos=0;
public:
banca();
bool prelievo(int cifra, int nc);
bool aggiungicliente(cliente c);
};


bool banca::prelievo(int cifra, int nc){


//trovo il cliente da cui prelevare
int a;
for(a=0;a<3;a++){
if(nc==vett[a].getNum_conto()) break;
}
//il cliente non esiste con quel nc
if(a==3) return false;
cout << "pos: " << a << endl;
//se il cliente esiste e se il saldo lo permette..prelevo
if(vett[a].getSaldo()>=cifra){
vett[a].setSaldo(4);
cout << "nuovo saldo " << vett[a].getSaldo();
return true;
} else return false;


}


banca::banca(){}
cliente::cliente(){}
bool banca::aggiungicliente(cliente c){
if(pos<3){
vett[pos]=c;
pos++;
return true;
}
return false;
}




cliente::cliente(int c,int s,string n){
num_conto=c;
saldo=s;
nome=n;
}


int cliente::getSaldo(){
return saldo;
}


void cliente::setSaldo(int s){
saldo=s;
}


int cliente::getNum_conto(){
return num_conto;
}






int main(){
cliente c1=cliente(2,1000,"luca");
cliente c2=cliente(6,1000,"massi");
cliente c3=cliente(8,1000,"marco");


banca b1=banca();
b1.aggiungicliente(c1);
b1.aggiungicliente(c2);
b1.aggiungicliente(c3);
bool x= b1.prelievo(500,6);
cout << x;
cout << c2.getSaldo();
}

shodan
14-06-2019, 02:38
In Java gli oggetti sono passati automaticamente per reference, in C++ sono passati per valore se non specificato diversamente.
Ne consegue che il cliente c2 creato fuori dalla banca diverso da quello aggiunto (che ne una copia).

Loading