Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C++]Consiglio su primo programma...

    Ciao a tutti, dopo tanto tempo ho deciso di riprovare a studiare il C++

    Premetto che conosco il C e tempo fa ho sviluppato anche dei programmi, poi per motivi di tempo ho abbandonato la programmazione.
    Ad oggi mi ritrovo con l'idea di fare due cose:

    - togliere la ruggine che si è formata in questi anni di inattività
    - riprovare a studiare il C++

    Negli anni scorsi avevo provato a studiarlo il C++ almeno un paio di volte, ma effettivamente con un bagaglio di conoscenze e abitudini della programmazione procedurale mi tornava difficile ragionare nei termini che richiede questo linguaggio.

    In quest'ultimo periodo mi sono letto un po' di guide e di manuali e oggi dopo tanta teoria mi sono messo a sviluppare un banale programma in C++.
    Il programma in questione non fa altro che simulare un conto corrente con le relative operazioni che si possono svolgere.
    Volevo un Vostro parere, perchè alcuni dubbi (ovviamente) ci sono...

    Questo è il codice:
    codice:
     //Main
     #include <iostream>
     #include <stdio.h>
     #include "conto.h"
     
    
     using namespace std;
     
    
     void showmenu(void);
     void waitchar(void);
     
    
     int main()
     {
         int scelta=99;
         float importo;
         
         //Istanzio la classe con saldo=0 tasso interessi =5.1
         conto cc(0, 5.1);
     
    
         while(scelta!=0)
         {
             showmenu();
             cin >> scelta;
     
    
             switch(scelta)
             {
                 case    0:
                     cout << "\nArrivederci\n\n";
                     break;
     
    
                 case    1:
                     cout << "\nIl saldo attuale è pari a: "<< cc.leggisaldo() << endl;
                     waitchar();
                     break;
     
    
                 case    2:
                     cout << "Importo da versare: ";
                     cin >> importo;
                     cc.versamento(importo);
                     break;
     
    
                 case    3:
                     cout << "Importo da prelevare: ";
                     cin >> importo;
                     if(cc.prelevamento(importo) == false)
                         cout << "Il saldo è inferiore a" << importo;
                     break;
     
    
                 case    4:
                     cout << "Ad oggi gli interessi ammontano a " << cc.calcolainteressi() << " in un saldo di " << cc.leggisaldo()<<endl;
                     cout << "Tasso applicato: " << cc.leggitasso() << endl;
                     waitchar();
                     break;
     
    
                 case    5:
                     cout << "Saldo prima di applicare gli interessi " << cc.leggisaldo() << endl;
                     cc.applicainteressi();
                     cout << "Tasso applicato: " << cc.leggitasso() << "%"<<endl;
                     cout << "Saldo attuale con interessi " << cc.leggisaldo()<<endl;
                     waitchar();
                     break;
     
    
                 default:
                     continue;
     
    
             }
     
    
         }
     
    
         return 0;
     }
     
    
     
    
     void showmenu()
     {
         cout << string(50, '\n');
         cout << "1 - Saldo\n";
         cout << "2 - Versamento\n";
         cout << "3 - Prelevamento\n";
         cout << "4 - Calcolo interessi\n";
         cout << "5 - Applica interessi\n";
         cout << "0 - Fine\n\n";
         cout << "? ";
     }
     
    
     void waitchar()
     {
         char    c;
     
    
         cout<< "Premere C+INVIO per continuare"<< endl;
         cin >> c;
     }
    codice:
     //conto.h
    
     class conto
     {
         private:
         float saldo;
         float tasso;
     
    
         public:
         conto(float, float);
         ~conto();
         bool versamento(float importo);
         bool prelevamento(float importo);
         float leggisaldo();
         float leggitasso();
         float calcolainteressi();
         float applicainteressi();
     };
    codice:
     //conto.cpp
     #include <iostream>
     #include "conto.h" 
    
     conto::conto(float _saldo, float _tasso)
     {
         saldo=_saldo;
         tasso=_tasso;
     
    
         std::cout << "Saldo attuale: " << saldo << "\n";
         std::cout << "Tasso attuale: " << tasso << "\n";
     
    
     }
     
    
     conto::~conto()
     {}
     
    
     
    
     bool conto::versamento(float importo)
     {
         saldo+=importo;
         return true;
     }
     
    
     
    
     bool conto::prelevamento(float importo)
     {
         if (importo <= saldo)
         {
             saldo-=importo;
             return true;
         }
         else return false;
     }
     
    
     float conto::leggisaldo()
     {
          return saldo;
     }
     
    
     float conto::leggitasso()
     {
          return tasso;
     }
     
    
     
    
     float conto::calcolainteressi()
     {
         return(saldo*tasso/100);
     }
     
    
     float conto::applicainteressi()
     {
         saldo+=(saldo*tasso/100);
         return(saldo);
     }
    Ovviamente ci sono le solite immancabili domande...

    - Come ambiente di sviluppo uso codeblocks che in automatico mi ha messo la riga “using namespace std;” che non ho visto in nessuno dei manuali che ho letto.
    Che significato ha questa riga?

    - Perchè se la variabile "scelta" (in main) la trasformo da int a char il programma non funziona più?
    Il programma apparentemente gira, ma sembra che non accetti nessuna scelta.

    - Va bene come ho fatto, e cioè mischiare semplici funzioni stile C (showmenu e waitchar) con le classi?

    - La logica di sviluppo del programma può andare così? avreste fatto diversamente?

    Purtroppo, la difficoltà più grande che trovo nello scrivere programmi in C++ non è la sintassi o la struttura, ma è capire come implementare una classe.

    Cioè, leggendo una qualsiasi guida che fa un qualsiasi esempio sembra tutto bello e chiarissimo, ma non appena mi trovo davanti ad una situazione reale da trasformare in C++ mi blocco perchè non so esattamente come sviluppare la classe per una determinata situazione.

    Esiste più che un manuale teorico sulla sintassi ecc. una guida che aiuti a capire e ragionare bene in questo senso?

    Vi ringrazio per l'attenzione e penso che non sarà l'ultima volta che mi sentirete

    Per questo mi scuso già da ora.



    Stefano
    Stefanoxjx

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2015
    Messaggi
    29
    - using namespace std importa classi e funzioni dai namespaces, nel caso specifico std, a quel punto puoi usare cio' che il namespace contiene senza specificare ogni volta la gerarchia completa, cio' pero' fa anche aumentare la possibilita' di collisioni fra nomi di classi con lo stesso nome che possono vivere su piu' namespace , quindi importare con prudenza

    - La dichiarazione del tipo di variabile dice al sistema di allocare un tot di memoria per contenere il valore di una data variabile, non puoi salvare il dato di un tipo in un altro tipo se il tipo di variabile non triggera l'allocazione della memoria sufficiente

    - Io sono un supporter del domain driven development, quindi non mischierei classi e funzioni procedurali e creerei molte piu' classi, anche per il tasso, percentuali, cifre, etc. pero' puo' andare bene anche cosi', che mi ricorda un po' lo style service-oriented, funzioni a parte

    - Leggi clean code, pragmatic programmer, patterns of enterprise, design patterns, alla lunga, nel breve termine cerca di mettere in pratica e allenati tenendo presente che (almeno secondo me) piu' che la conoscenza del linguaggio specifico, la cosa piu' importante e' allenarsi a semplificare e a dividere le responsabilita' fra le classi che comunque viene anche facilitata dalla conoscenza del dominio

  3. #3
    Ciao Cisco87 e grazie per la risposta.

    Quote Originariamente inviata da cisco87 Visualizza il messaggio
    - using namespace std importa classi e funzioni dai namespaces, nel caso specifico std, a quel punto puoi usare cio' che il namespace contiene senza specificare ogni volta la gerarchia completa, cio' pero' fa anche aumentare la possibilita' di collisioni fra nomi di classi con lo stesso nome che possono vivere su piu' namespace , quindi importare con prudenza
    Effettivamente facendo un po' di prove ho visto che togliendo quella riga e anteponendo a tutte le istruzioni cout e cin un "std::" funziona lo stesso.
    Dove potrei trovare maggiori info sull'argomento e sopratutto su cosa include std e i vari namespaces?

    - La dichiarazione del tipo di variabile dice al sistema di allocare un tot di memoria per contenere il valore di una data variabile, non puoi salvare il dato di un tipo in un altro tipo se il tipo di variabile non triggera l'allocazione della memoria sufficiente
    Infatti se anzichè trasformarla in char la trasformo in short funziona.
    Con il C avrebbe funzionato comunque, quindi devo imparare a fare più attenzione a queste cose.

    - Io sono un supporter del domain driven development, quindi non mischierei classi e funzioni procedurali e creerei molte piu' classi, anche per il tasso, percentuali, cifre, etc. pero' puo' andare bene anche cosi', che mi ricorda un po' lo style service-oriented, funzioni a parte
    Ma ha senso creare una classe per implementare un solo metodo per esempio showmenu?

    - Leggi clean code, pragmatic programmer, patterns of enterprise, design patterns, alla lunga, nel breve termine cerca di mettere in pratica e allenati tenendo presente che (almeno secondo me) piu' che la conoscenza del linguaggio specifico, la cosa piu' importante e' allenarsi a semplificare e a dividere le responsabilita' fra le classi che comunque viene anche facilitata dalla conoscenza del dominio
    OK, faccio un po' di ricerche in merito.

    Grazie.

    Stefano
    Stefanoxjx

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.