Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Google ha appena rinnovato la sua celebre serie A con il Pixel 10a, lo smartphone della serie più conveniente se consideriamo il rapporto tra costo e prestazioni. Con il chip Tensor G4, un design raffinato soprattutto sul retro e l'integrazione profonda di Gemini, il colosso di Mountain View promette un'esperienza premium a un prezzo accessibile. E il retro non ha nessuno scalino
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026
Al MWC Qualcomm annuncia una coalizione industriale per lanciare il 6G entro il 2029 e introduce agenti IA per la gestione autonoma della RAN. Ericsson, presente sul palco, conferma la direzione: le reti del futuro saranno IA-native fin dalla progettazione
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso
CHUWI CoreBook Air è un ultraleggero da 1 kg con Ryzen 5 6600H, display 14" 16:10 e 16 GB LPDDR5. Offre buona portabilità, autonomia discreta e costruzione in alluminio, ma storage PCIe 3.0 e RAM saldata limitano l'espandibilità. A 549 euro sfida brand più noti nella stessa fascia di mercato.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-05-2011, 00:01   #1
Sax_93
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;
}
Sax_93 è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2011, 00:03   #2
Sax_93
Member
 
Iscritto dal: Apr 2011
Messaggi: 62
P.S
voglio capire cosa sbaglio...
Sax_93 è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2011, 15:23   #3
dileoa
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;
}
Manca il costruttore. Ciò vuol dire che lasci al compilatore l'inizializzazione dell'oggetto (si può fare per carità, ma...), pertanto avrei inserito un costruttore:
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;
}
Non ne sono certo, ma la creazione di un array di un oggetto complesso come una classe non può essere fatta così:
Codice:
conto cont[MAX];
Ma deve essere fatta utilizzando l'operatore new:
Codice:
cont = new conto[MAX];
La classe conto_corrente l'avrei scritta così:
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];
}
Tieni presente che gli oggetti costruiti dinamicamente con new devono poi essere esplicitamente distrutti con delete. Pertanto nelle due classi avrei inserito i relativi distruttori.
Per il programma principale vedrò di darti qualche consiglio non appena avrò sottomano il compilatore c++.
A presto
ADL
dileoa è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2011, 18:41   #4
Sax_93
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...??
Sax_93 è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2011, 20:37   #5
dileoa
Member
 
Iscritto dal: Sep 2005
Messaggi: 80
In C++ la sintassi dei costruttori è obbligata:
Dichiarazione:
Codice:
class conto
{
  public:
    conto(); //oppure
    conto(... eventuali argomenti...);
}
Definizione
Codice:
conto::conto()
{
  ...
}

conto::conto(...argomenti...)
{
  ...
}
in questa forma il costruttore è eseguito automaticamente ogni volta che un oggetto della classe è creato. Purtroppo new e delete sono operatori fondamentali nel C++ e il loro uso deve essere ben conosciuto. Ti suggerirei di leggere qualche manuale. Ottimo e gratuito "Thinking in c++" scaricabile da internet.

Ultima modifica di dileoa : 10-05-2011 alle 20:41.
dileoa è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2011, 20:46   #6
Sax_93
Member
 
Iscritto dal: Apr 2011
Messaggi: 62
beh io uso Dev C++ se lo conosci...
Sax_93 è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2011, 20:54   #7
GByTe87
Senior Member
 
L'Avatar di GByTe87
 
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
GByTe87 è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2011, 21:46   #8
dileoa
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();
  ...
}
Dovendo creare un array di oggetti conto allora si deve usare new
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;
}
dileoa è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2011, 21:56   #9
GByTe87
Senior Member
 
L'Avatar di GByTe87
 
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
GByTe87 è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2011, 22:19   #10
Sax_93
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;
}
Sax_93 è offline   Rispondi citando il messaggio o parte di esso
Old 20-05-2011, 15:12   #11
dileoa
Member
 
Iscritto dal: Sep 2005
Messaggi: 80
Modifica così il costruttore:
Codice:
conto::conto()
{
  numero_conto=0;
  intestatario=new char[MAX];
  saldo=0;
}
In questo modo allocherai lo spazio di memoria necessario per memorizzare la stringa di caratteri.
Dovrai, inoltre, inserire anche un distruttore:
Codice:
class conto
{
  public:
    ...
    ~conto();
};

conto::~conto()
{
  delete[]intestatario;
}
ADL

Ultima modifica di dileoa : 20-05-2011 alle 15:27.
dileoa è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026 6G, da rete che trasporta dati a rete intelligen...
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso CHUWI CoreBook Air alla prova: design premium, b...
Roborock Saros 20: il robot preciso e molto sottile Roborock Saros 20: il robot preciso e molto sott...
ASUS ROG Kithara: quando HIFIMAN incontra il gaming con driver planari da 100mm ASUS ROG Kithara: quando HIFIMAN incontra il gam...
MacBook Neo: nessuna sorpresa nei primi ...
La serie POCO X8 Pro è pronta al ...
Smartphone: 2026 difficile per il mercat...
Star Wars: Knights of the Old Republic R...
Huang, NVIDIA: OpenClaw ha realizzato in...
Annunciano il recupero di 4,8 milioni di...
Oggi degli ottimi auricolari Sony con ca...
Muffa in casa? Questo deumidificatore da...
Sonos Era 100: il punto d'ingresso per u...
"Non stiamo sostituendo nessuno con...
Tutti i robot in offerta ora: prezzi bas...
Fra 3 giorni, a mezzanotte, Amazon attiv...
Il principale limite del MacBook Neo &eg...
899€ in tutti i colori, crolla il prezzo...
Sempre più pubblicità su Y...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:03.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v