[C++]Guida teorica

parte 1

« Older   Newer »
 
  Share  
.
  1. n1md4
     
    .

    User deleted


    Introduzione rapida al linguaggio C++


    Programmazione in C++

    Questo corso ha come obiettivo il far acquisire all’aspirante programmatore conoscenze di base della programmazione e dare alcune nozioni di base come interagire con i file, interfacce grafiche, processi, finestre e vedremo come opera un piccolo virus a livello molto semplice.


    Storia rapidissima del linguaggio C++
    Il c++ nasce dal linguaggio c, è però più completo del c, inoltre è stato inventato nel 1979 da Bearne Stroupstroup. Passiamo subito alla parte più pratica.


    Java, C# e C++ cosa c’entrano?

    Su questo è bene spendere un pò di parole.
    C++ è il papà sia di Java che di C#. La sintassi di questi linguaggi è infatti molto simile. Se sai uno di questi linguaggi, è relativamente semplice imparare gli altri due.
    I programmi Java e C# sono più compatibili del C++, poiché questo è stato progettato per “girare” soprattutto su macchine Intel Pentium con sistemi Windows, mentre C# e Java vanno anche su altri sistemi, mentre sono a proprio agio con software Internet.
    Però la compatibilità costa: Java e C# sono più lenti del C++.

    C++ è meno compatibile con altri sistemi perché produce direttamente un linguaggio macchina che viene eseguito direttamente dalla CPU, mentre Java e C# producono uno pseudo-codice intermedio. Dunque un programma C++, per essere compatibile con vari sistemi, deve essere prodotto in più versioni. Invece un programma Java o C#, utilizzano lo stesso codice intermedio, basta che la macchina sulla quale vengano eseguiti abbia l’apposito “traduttore” per questi pseudo-linguaggi. Per il Java di solito il linguaggio intermedio è detto bytecode e viene eseguito da un sistema runtime del quale penso che tutti abbiano prima o poi sentito parlare: JVM cioè Java Virtual Machine. Per C# invece è il CLR, Common Language Runtime. Allora Java e C# sono più compatibili, ma la decodificazione dello pseudo-codice richiede più tempo da parte del sistema, dunque C++ è il più veloce nel suo ambiente.
    Ereditarietà, polimorfismo e incapsulazione
    Sono le caratteristiche principali di C++. Ma sono un po’ complesse perciò le capirete in seguito. Basta per ora, al codice.

    Il Primo Programma in C++


    Ecco il vostro primo programma in C++:

    CODICE:
    SPOILER (click to view)
    /*
    Questo programma è orrendo !
    */

    #include <iostream> // Il programma parte dall’istruzione “main”


    void main()
    {

    printf(“Ciao Mondo!”);

    }


    Bene, cosa notiamo? Innanzitutto vediamo che i colori del testo sono piuttosto brutti, poi cos'altro?
    Secondo voi, l'istruzione "Questo programma è orrendo !" verrà eseguita?
    E l'istruzione "Il programma parte dall’istruzione “main”" ?

    La risposta è no, perché in C++, tutto ciò che è racchiuso tra /* e */ non viene eseguito ! Allo stesso modo funzionano le cose per // . Questi sono i cosiddetti "Commenti", quasi tutti i linguaggi hanno ormai questa capacità.
    A cosa servono? Servono per facilitare la vita al programmatore, in modo da poter individuare subito una istruzione importante nel programma o a ricordarsi di cosa fa una precisa istruzione.

    L'unica differenza da tenere a mente nell'uso di questi commenti è che i commenti con /* devono necessariamente finire con */ , altrimenti tutto il codice sarebbe preso per commento, e il compilatore non compilerebbe nulla. Infatti /* e */ è un commento "multiriga", cioé potremmo anche scrivere la divina commedia tra questi due segni, poiché il compilatore se ne fregherebbe altamente. Con // le cose sono simili fatta eccezione per una cosa: se andiamo a capo, il commento non vale più. Quindi ecco come si usano i commenti:

    SPOILER (click to view)
    /*
    Commento Multiriga.
    Che bella giornata è oggi, mi sento contento
    Credo che andrò a fare una passeggiata

    */

    codice che viene eseguito...

    codice che viene eseguito...
    // Qui io non sono eseguito !!!

    qui sì...


    Bene. Ora analizziamo il resto del codice. La riga di interesse successiva è

    #include <iostream>

    Cosa succede qui? Il linguaggio C++ definisce vari Header, ovvero dei file in formato .h che contengono informazioni utili e necessarie per il corretto svolgimento del programma. In base alle funzioni che utilizziamo, dobbiamo "dichiarare", ovvero mettere in cima al programma nella sintassi #include , l'header che permette l'utilizzo di quelle funzioni. In questo programma vediamo che vi sono due funzioni: main e printf, la prima è la funzione che viene eseguita per prima dal compilatore, è dunque un'istruzione simile al "begin" dello scabroso linguaggio Pascal (non delphi, intendo proprio pascal non-object oriented), mentre la seconda, printf, serve a visualizzare un testo sullo schermo. Ogni funzione, come ad esempio main, ha una struttura basilare che è più o meno la seguente:

    CODICE:
    SPOILER (click to view)
    // Questo è lo schema di una funzione

    int MyFunction(int nVal)
    {

    // Istruzioni varie...

    return 0;
    }


    Spiegando questa struttura possiamo osservare che nella prima riga della funzione vi sono già quasi tutte le informazioni sul tipo della funzione: int MyFunction(int nVal) ci comunica infatti che la funzione ha nome "MyFunction", che per utilizzarla devo passarle una variabile o un numero di tipo int cioé intero ( MyFunction(25) ) , e che la funzione restituirà un valore di tipo int, ( int MyFunction(int nVal) ) tramite una chiamata finale all'istruzione return "valore di tipo int" . Ogni funzione ha poi il suo "corpo centrale", cioé il codice dove esegue le operazioni, racchiuso tra parentesi graffe. (Le parentesi graffe si fanno con il tasto per la parentesi quadra, tenendo premuti assieme ad esso "Alt Gr" e "Shift" (maiuscolo); oppure attivando il tasto "Bloc Num" e, tenendo premuto "Alt", premere in successione 0 - 1 - 2 - 3 oppure 0 - 1 - 2 - 5. La nostra funzione main, non restituisce nulla e non ha nemmeno una istruzione finale "return". Questo perché la funzione è di tipo void, cioé "nessun valore restituito". Infatti a cosa servirebbe restituire un valore se il programma è ormai finito ? (Si potrebbe anche dichiarare la funzione come "int main()", ma alla fine dovremmo restituire un qualsiasi valore intero, come per esempio "return 1234;"). printf è anch'essa una funzione, ma è già stata dichiarata, cioé non dobbiamo scrivere una cosa di questo genere:

    CODICE
    SPOILER (click to view)
    int printf(const char*,...)
    {

    // Istruzioni varie...

    return 0;
    }


    perché la funzione ha già un corpo simile a questo; dove?, nell'header che abbiamo dichiarato: . Dunque noi ci limitiamo a richiamarla normalmente dalla funzione principale main. A printf, dopo aperta la parentesi, passiamo un valore di tipo "char*", per ora lasciamo perdere di che tipo sia, sarà approfondito nella lezione sui tipi di dati e sugli operatori, limitiamoci a dire che possiamo usare printf in questo modo: printf(“testo che vogliamo visualizzare ”); Inoltre, inserendo nel bel mezzo del nostro testo " n " oppure " t ", potremo rispettivamente andare a capo (n) e tabulare il testo (t).

    Compilare il programma

    Per compilare, cioé creare il file ".exe" per eseguire l'applicazione, dobbiamo utilizzare un compilatore. In Internet se ne trovano tanti. Se volete avere il meglio, trovate il famoso compilatore della Microsoft Visual C++, (io uso il 6.0 in questo tutorial), oppure l'altrettanto famoso Borland C++ Builder. Ma va bene uno qualsiasi.

    Purtroppo non posso fornire informazioni adeguate su come compilare il programma, perché molti compilatori offrono diversi modi di compilazione. In Visual C++ per esempio si può scrivere il programma in un file .cpp e poi semplicemente premere il tasto "Build" o premere F7 (ambiente di sviluppo integrato IDE), oppure utilizzare la compilazione a riga di comando. Quindi è fondamentale che leggiate tutta la documentazione relativa alla compilazione allegata al vostro compilatore scaricato, comprato, trovato su cd oppure rubato.

    Nota: L'utilizzo a riga di comando è ovvio a tutti, no? Se non sapete cos'é, leggete le ultime righe qui sotto.

    Compilazione a riga di comando

    E' la classica compilazione da dos. Ammettiamo che abbiate scaricato un compilatore qualsiasi. Trovate il file eseguibile del compilatore (nel nostro esempio è un file con nome cl.exe). Andate su "start" poi su "Tutti i programmi" poi su "Accessori" e "Prompt dei Comandi". Ecco il dos. Cercate la directory dove è installato il file cl.exe tramite i comandi "dir" per elencare i file e le cartelle in una directory e "cd nomecartella" per accedere ad una cartella specifica. Trovata la cartella dove sta cl.exe, digitate cl.exe . Dovrebbe apparirvi una serie di comandi che vi indicheranno come compilare il programma. Ad esempio con Visual C++, a riga di comando funziona così:

    image

    Quella riga "usage: cl [option...] filename... [/link linkoption...]" ci fornisce tutte le indicazioni necessarie per compilare il nostro programma. Digitiamo allora "cl.exe -GX C:Ezempia.cpp" per compilare il file .cpp scritto anche con il blocco note (l'importante è che sia salvaro in formato .cpp) situato in C:. L'opzione -GX è opzionale, in Visual C++ serve a migliorare la compilazione.

    image

    Perfetto. Questo ci dice che ha compilato il file "Ezempia.exe". Di solito in Visual C++ il file viene messo nella directory creata nella stessa cartella del file .cpp "Debug". Assieme al file .exe troveremo qualche altro file di costruzione .obj. Lasciamoli stare, servono solo al compilatore. Fatto.

    fonte: AlexMark
     
    Top
    .
0 replies since 4/9/2009, 10:44   55 views
  Share  
.