Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258

    [C++] Modifica campo non si riflette su oggetto originale

    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
    codice:
    #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();
    }

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    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).
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.