|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2011
Messaggi: 62
|
[C++] Programma con le classi derivate
ciao io ho iniziato da poco a lavorare con le classi derivate...
il mio programma dovrebbere essere una specie di banca, dove si inserisce tutti i dati della classe ke ho messo di sotto, poi si preleva il saldo e lo si aggiorna; allostesso modo gli si può agiungere anke dei soldi al saldo tuo e lo si aggiorna sempre... Io del programma ho trovato degli errori sintattici e non so se il programma funge, mi potete dare una mano e magare spiegarmelo anke?... Ecco il codice: #include <iostream> #include <stdlib.h> #include <string.h> using namespace std; #define MAX 20 class conto { protected: int numero_conto; char intestatario[MAX]; float saldo; public: void registra(int numeroc,char intestatar[],float sald){ numero_conto=numeroc; strcpy(intestatario,intestatar); saldo=sald; return; } void visualizza(){ cout<<numero_conto; cout<<intestatario; cout<<saldo; return; } }; conto cont[MAX]; class conto_corrente : public conto{ char banca[MAX]; public: void preleva(float preleva_saldo){ saldo-=preleva_saldo; return; } void versa(float versa_saldo){ saldo+=versa_saldo; return; } void mostra(){ cout<<saldo; return; } }; conto_corrente contoC[MAX]; int registra(){ int numero_conto,risposta,i=-1; char intestatario[MAX]; float saldo; do{ i++; cout<<"Inserisci il NUMERO DI CONTO del cliente"<<"%d"<<endl; cin>>numero_conto; cout<<"Inserisci l'INTESTATARIO del numero di conto"<<"%d"<<endl; cin>>intestatario; cout<<"Inserisci il SALDO del numero di conto del cliente"<<"%d"<<endl; cin>>saldo; cont[i].registra(numeroc,intestatar,sald); conut<<"Vuoi inserire un altro cliente? (0=NO 1=SI)"<<endl; cin>>risposta; }while(risposta==1); return i;} void preleva_soldi(){ int k=0,risposta1; float preleva_saldo; do{ cout<<"Quanto vuoi prelevare?"; cin>>preleva_saldo; contoC[k].preleva(preleva_saldo); cout<<"Vuoi prelevare altri soldi? (0=NO 1=SI)"<<endl; cin>>risposta1; }while(risposta1==1); return;} void versa_soldi(){ int j=0,risposta2; float versa_saldo; do{ cout<<"Quanto vuoi versare?"; cin>>versa_saldo; contoC[j].versa(versa_saldo); cout<<"Vuoi versare altri soldi? (0=NO 1=SI)"<<endl; cin>>risposta2; }while(risposta2==1); return;} void visualizza_saldo(){ cout<<"Il tuo saldo e': "<<"%5.2f"<<mostra.saldo; return;} main(){ registra(); preleva_soldi(); versa_soldi(); visualizza_saldo(); system("PAUSE"); return 0; } |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Apr 2011
Messaggi: 62
|
P.S
voglio capire cosa sbaglio... |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 80
|
Innanzi tutto, ritengo debba mettere un po' d'ordine nel listato. Nella classe conto hai definito inline due funzioni che inline non dovrebbero essere. Io avrei scritto così:
Codice:
class conto
{
public:
void registra(int numeroc,char intestatar[],float sald);
void visualizza();
protected:
int numero_conto;
char intestatario[MAX];
float saldo;
};
void conto::registra(int numeroc,char intestatar[],float sald)
{
numero_conto=numeroc;
strcpy(intestatario,intestatar);
saldo=sald;
}
void conto::visualizza()
{
cout<<numero_conto;
cout<<intestatario;
cout<<saldo;
}
Codice:
class conto
{
public:
conto();
void registra(int numeroc,char intestatar[],float sald);
void visualizza();
protected:
int numero_conto;
char* intestatario;
float saldo;
};
conto::conto()
{
intestatario=new char[MAX];
numero_conto=0;
saldo=0;
}
void conto::registra(int numeroc,char intestatar[],float sald)
{
numero_conto=numeroc;
strcpy(intestatario,intestatar);
saldo=sald;
}
void conto::visualizza()
{
cout<<numero_conto;
cout<<intestatario;
cout<<saldo;
}
Codice:
conto cont[MAX]; Codice:
cont = new conto[MAX]; Codice:
class conto_corrente : public conto
{
public:
conto_corrente(); //costruttore
void preleva(float preleva_saldo)){saldo-=preleva_saldo;}; // definita inline
void versa(float versa_saldo){saldo+=versa_saldo;}; // definita inline
void mostra(){cout<<saldo;}; definita inline
private:
char* banca;
};
conto_corrente::conto_corrente: conto() //chiamata al costruttore della classe base
{
banca=new char[MAX];
}
Per il programma principale vedrò di darti qualche consiglio non appena avrò sottomano il compilatore c++. A presto ADL |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Apr 2011
Messaggi: 62
|
scusami ma il costruttore sarebbe:
nella classe base... void azzera{ saldo=0; return;} inoltre devo usare perforza new? ke non lo so usare...?? |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 80
|
In C++ la sintassi dei costruttori è obbligata:
Dichiarazione: Codice:
class conto
{
public:
conto(); //oppure
conto(... eventuali argomenti...);
}
Codice:
conto::conto()
{
...
}
conto::conto(...argomenti...)
{
...
}
Ultima modifica di dileoa : 10-05-2011 alle 20:41. |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Apr 2011
Messaggi: 62
|
beh io uso Dev C++ se lo conosci...
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
|
Comunque la creazione di istanze di una classe può essere fatta senza problemi col metodo classico, senza new e delete.
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 80
|
Anch'io ho usato DEV C++. Il discorso dei costruttori è indipendente dall'IDE. Per quanto riguarda l'uso di new e delete temo di essere stato frainteso. new e delete vanno utilizzati essenzialmente per creare array di oggetti.
Il codice per istanziare un oggetto è molto più semplice: Codice:
class conto
{
public:
conto();
conto(...eventuali argomenti---);
...
};
main()
{
conto mioconto;
conto tuoconto(...eventuali argomenti...);
...
mioconto.visualizza();
...
}
Codice:
main()
{
conto mioconto;
conto tuoconto(...eventuali argomenti...);
conto* conti;
conti = new conto[10];
...
mioconto.visualizza();
...
for(int i=0;i<10;i++)conti[i]->visualizza();
...
delete[]conti;
}
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
|
Puoi usare l'allocazione statica anche per array di oggetti
es: Codice:
class test {
public:
test(int a, int b) {
cout << a << b << endl;
}
};
int main(){
test obj[2] = { { 1, 2 }, { 3, 4 } };
...
}
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Apr 2011
Messaggi: 62
|
raga ho rifatto il codice ma mi crasha dopo metto il saldo mi aiutate a sistemarlo velocemente perfavore?
#include <iostream> #include <stdlib.h> #include <string.h> using namespace std; #define MAX 20 class conto { public: conto(); void registra(int numeroc,char intestatar[],float sald); void visualizza(); protected: int numero_conto; char* intestatario; float saldo; }; conto::conto() { saldo=0; } void conto::registra(int n,char i[],float s) { numero_conto=n; strcpy(intestatario,i); saldo=s; } void conto::visualizza() { cout<<numero_conto; cout<<intestatario; cout<<saldo; } conto cont[MAX]; class conto_corrente : public conto { private: char banca[MAX]; public: void preleva(float preleva_saldo){saldo-=preleva_saldo;}; void versa(float versa_saldo){saldo+=versa_saldo;}; void mostra(){cout<<saldo;}; }; conto_corrente contC[MAX]; int registra(){ int numeroc,risposta,i=-1; char intestatar[MAX]; float sald; do{ i++; cout<<"Inserisci il NUMERO DI CONTO del cliente "<<i+1<<endl; cin>>numeroc; cout<<"Inserisci l'INTESTATARIO del numero di conto "<<i+1<<endl; cin>>intestatar; cout<<"Inserisci il SALDO del numero di conto del cliente "<<i+1<<endl; cin>>sald; cont[i].registra(numeroc,intestatar,sald); cout<<"Vuoi inserire un altro cliente? (0=NO 1=SI)"<<endl; cin>>risposta; }while(risposta==1); return i;} void preleva(){ int k=0,risposta1; float preleva_saldo; do{ cout<<"Quanto vuoi prelevare?"; cin>>preleva_saldo; contC[k].preleva(preleva_saldo); cout<<"Vuoi prelevare altri soldi? (0=NO 1=SI)"<<endl; cin>>risposta1; }while(risposta1==1); return;} void versa(){ int j=0,risposta2; float versa_saldo; do{ cout<<"Quanto vuoi versare?"; cin>>versa_saldo; contC[j].versa(versa_saldo); cout<<"Vuoi versare altri soldi? (0=NO 1=SI)"<<endl; cin>>risposta2; }while(risposta2==1); return;} void visualizza_saldo(){ int k; cout<<"Il tuo saldo e': "; contC[k].mostra(); return;} main(){ registra(); preleva(); versa(); visualizza_saldo(); system("PAUSE"); return 0; } |
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 80
|
Modifica così il costruttore:
Codice:
conto::conto()
{
numero_conto=0;
intestatario=new char[MAX];
saldo=0;
}
Dovrai, inoltre, inserire anche un distruttore: Codice:
class conto
{
public:
...
~conto();
};
conto::~conto()
{
delete[]intestatario;
}
Ultima modifica di dileoa : 20-05-2011 alle 15:27. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:03.



















