![]() |
|
Editore: Apogeo Pagine: 670 Autore: Deitel & Deitel Collana: PerCorsi di studio Acquistalo a prezzo scontato:
|
Data Pubblicazione: 2001-02-01 ISBN: 8873036708 Prezzo: 35.64 € Lingua: italiano |
I manuali della coppia "Deitel & Deitel" si basano su una formula didattica collaudata ed efficace: una formula i cui ingredienti sono la completezza dei contenuti, la gradualità dell'esposizione, il continuo riferimento a programmi completamente eseguibili e l'attenzione alle problematiche reali che sorgono nell'attività di sviluppo del software. Questo volume è un ideale strumento per un corso introduttivo sul linguaggio C++. Il testo che non presuppone nel lettore alcuna conoscenza di programmazione, è pienamente aggiornato al nuovo standard ANSI/ISO e dedica ampio spazio alla progettazione di programmi mediante UML.
Questo libro e' la traduzione dei primi 11 capitoli del titolo "C++ How to Program, Third Edition" dell'editore Prentice Hall. Gli altri capitoli dell'originale in lingua inglese (Cap.11 - Cap.21) sono stati tradotti, sempre da Apogeo, nel libro "C++ Tecniche avanzate di programmazione" (ISBN 88-7303-731-3).
Harvey M. Deitel e Paul J. Deitel sono i fondatori della Deitel & Associates, una delle più qualificate società di formazione in ambito informatico; i loro manuali dedicati alla programmazione in C, C++ e Java sono utilizzati in tutto il mondo in centinaia di università e scuole di formazione.
Nel CD-ROM allegato al testo sono inclusi Microsoft Visual C++ 6.0 Introductory Edition e i codici sorgenti di tutti gli esempi presenti nel volume.
Visitate il booksite di questo libro all'indirizzo URL: www.apogeonline.com/education/booksite
Prefazione
Capitolo 1 - Introduzione: i computer, la programmazione, C++
Capitolo 2 - Le strutture di controllo
Capitolo 3 - Le funzioni
Capitolo 4 - Gli array
Capitolo 5 - Puntatori e stringhe
Capitolo 6 - Le classi e l'astrazione dei dati
Capitolo 7 - Le classi: seconda parte
Capitolo 8 - L'overloading degli operatori
Capitolo 9 - L'ereditarietà
Capitolo 10 - Le funzioni virtuali e il polimorfismo
Capitolo 11 - Gli stream di input/output del C++
Appendice A - Riepilogo degli operatori
Appendice B - L'insieme dei caratteri ASCII
Appendice C - I sistemi di numerazione
Appendice D - Il C++ su Internet
Indice analitico
sommario Prefazione XI Lo scopo di questo libro XI Le sezioni "Pensare in termini di oggetti" XIII Il CD-ROM XIV La metodologia di insegnamento XIV L'apprendimento attraverso il codice XIV L'accesso al World Wide Web XIV Obiettivi XIV Il codice e gli esempi XV La programmazione orientata agli oggetti XV Figure e immagini XV Consigli e suggerimenti XV Esercizi di autovalutazione XVI Esercizi XVI Indice analitico XVI Panoramica del libro XVII Capitolo 1: Introduzione: i computer, la programmazione e il C++ 1 1.1 Introduzione 1 1.2 Che cos'è un computer? 3 1.3 La struttura del computer 4 1.4 L'evoluzione dei sistemi operativi 5 1.5 I personal computer, i sistemi distribuiti e i sistemi client/server 6 1.6 I linguaggi macchina, assembly e ad alto livello 6 1.7 Il C e il C++: un po' di storia 8 1.8 La libreria standard del C++ 9 1.9 Java, Internet e il World Wide Web 10 1.10 Altri linguaggi ad alto livello 10 1.11 La programmazione strutturata 11 1.12 Gli elementi fondamentali di un tipico ambiente C++ 11 1.13 Alcune considerazioni generali sul C++ e sul nostro corso 14 1.14 Un programma semplice: visualizzare una linea di testo 16 1.15 Un altro semplice programma: l'addizione di due numeri interi 20 1.16 La memoria: concetti fondamentali 24 1.17 I calcoli aritmetici 25 1.19 Prendere decisioni: gli operatori relazionali e di uguaglianza 28 1.20 Le nuove convenzioni per i file di intestazione e gli spazi dei nomi 32 1.21 Pensare in termini di oggetti: le tecniche orientate agli oggetti e UML (Unified Modeling Language?) 33 Introduzione all'analisi e alla progettazione orientate agli oggetti (OOAD) 36 Storia di UML 37 Che cos'è UML? 37 Esercizi di autovalutazione 38 Risposte agli esercizi di autovalutazione 40 Esercizi 41 Capitolo 2: Le strutture di controllo 47 2.1 Introduzione 47 2.2 Gli algoritmi 47 2.3 Lo pseudocodice 48 2.4 Le strutture di controllo 48 2.5 La struttura di selezione if 51 2. 6 La struttura di selezione if/else 53 2.7 La struttura iterativa while 57 2.8 Tipologie degli algoritmi di iterazione: l'iterazione controllata da un contatore 58 2.9 Tipologie degli algoritmi di iterazione: l'iterazione controllata da un valore sentinella 60 2.10 Tipologie di algoritmi e ridefinizione top-down: le strutture di controllo nidificate 67 2.11 Gli operatori di assegnamento 71 2.12 Gli operatori di incremento e decremento 72 2.13 Concetti fondamentali dei cicli controllati da variabili contatore 75 2.14 La struttura di iterazione for 77 2.15 Esempi di costrutti for 81 2.16 La struttura di selezione switch 85 2.17 La struttura iterativa do/while 91 2.18 Le istruzioni break e continue 93 2.19 Gli operatori logici 95 2.20 Un errore tipico: confondere l'operatore di uguaglianza == con l'operatore di assegnamento = 98 2.21 Riepilogo dei concetti fondamentali della programmazione strutturata 100 2.22 Pensare in termini di oggetti: come individuare le classi in un problema [progetto opzionale] 106 Definizione del problema 106 Analisi e progettazione del sistema 110 I diagrammi dei casi d'uso 111 L'identificazione delle classi di un sistema 112 I diagrammi delle classi 113 I diagrammi degli oggetti 116 Esercizi di autovalutazione 117 Risposte agli esercizi di autovalutazione 119 Esercizi 122 Capitolo 3: Le funzioni 133 3.1 Introduzione 133 3.2 I componenti di un programma in C++ 133 3.3 Le funzioni matematiche della libreria standard 135 3.4 Le funzioni 136 3.5 La definizione di una funzione 137 3.6 I prototipi di funzione 141 3.7 I file di intestazione 144 3.8 La generazione di numeri casuali 146 3.9 I giochi d'azzardo e la parola riservata enum 151 3.10 Le informazioni di memorizzazione 155 3.11 Le regole di visibilità 157 3.12 Il concetto di ricorsione 161 3.13 Un altro esempio di ricorsione: la serie di Fibonacci 164 3.14 Ricorsione o iterazione? 168 3.15 Le funzioni che hanno una lista di parametri vuota 170 3.16 Le funzioni in linea 171 3.17 I riferimenti e il passaggio di parametri per riferimento 173 3.18 Gli argomenti di default 177 3.19 L'operatore unario di risoluzione dello scope 179 3.20 L'overloading delle funzioni 180 3.21 Le funzioni generiche 182 3.22 Pensare in termini di oggetti : come identificare gli attributi di una classe [progetto opzionale] 184 I diagrammi di stato 186 I diagrammi delle attività 188 Conclusione 190 Esercizi di autovalutazione 190 Risposte agli esercizi di autovalutazione 193 Esercizi 195 Capitolo 4: Gli array 205 4.1 Introduzione 205 4.2 Gli array 205 4.3 Come si dichiara un array 208 4.4 Alcuni esempi di array 208 4.5 Il passaggio di un array a una funzione 222 4.6 Gli algoritmi di ordinamento e gli array 227 4.7 Il calcolo di media, mediana e moda con gli array 229 4.8 Le ricerche in array: ricerca lineare e binaria 233 4.9 Gli array multidimensionali 238 4.10 Pensare in termini di oggetti : come identificare le operazioni di una classe [progetto opzionale] 244 I diagrammi di sequenza 249 Esercizi di autovalutazione 252 Risposte agli esercizi di autovalutazione 253 Esercizi 254 Esercizi sulla ricorsione 264 Capitolo 5: Puntatori e stringhe 265 5.1 Introduzione 265 5.2 Come si dichiarano e si inizializzano i puntatori 265 5.3 Gli operatori di manipolazione dei puntatori 267 5.4 La chiamata per riferimento con argomenti di tipo puntatore 269 5.5 Privilegi di accesso e passaggio dei parametri 274 5.6 L'algoritmo di ordinamento a bolle con i puntatori 279 5.7 L'aritmetica dei puntatori 285 5.8 La correlazione tra puntatori e array 287 5.9 Gli array di puntatori 292 5.10 Un programma per mescolare e distribuire carte da gioco 293 5.11 I puntatori a funzione 298 5.12 Introduzione alla manipolazione di caratteri e stringhe 302 5.12.1 Caratteri e stringhe: concetti fondamentali 303 5.12.2 Le funzioni di libreria per le stringhe 305 5.13 Pensare in termini di oggetti : le collaborazioni tra gli oggetti [progetto opzionale] 312 I diagrammi delle collaborazioni 314 Riepilogo 315 Risorse in rete sull'UML 316 Esercizi di autovalutazione 320 Risposte agli esercizi di autovalutazione 322 Esercizi 323 Sezione speciale: costruite il vostro computer 327 Ultriori esercizi sui puntatori 332 Esercizi sulla manipolazione di stringhe 336 Sezione speciale: esercizi avanzati sulla manipolazione di stringhe 338 Un progetto di manipolazione di stringhe complesso 341 Capitolo 6: Le classi e l'astrazione dei dati 343 6.1 Introduzione 343 6.2 Come si definisce una struttura 344 6.3 Come si accede ai membri di una struttura 345 6.4 L'implementazione del tipo di dato Time come struttura 346 6.5 L'implementazione del tipo di dato Time come classe 348 6.6 La visibilità a livello di classe e l'accesso ai membri di una classe 356 6.7 La separazione di interfaccia e implementazione 357 6.8 Il controllo dell'accesso ai membri di una classe 361 6.9 Le funzioni di accesso e di utilità 364 6.10 L'inizializzazione degli oggetti di una classe: i costruttori 367 6.11 I costruttori e gli argomenti di default 368 6.12 I distruttori 371 6.13 Quando sono chiamati i costruttori e i distruttori? 372 6.14 L'utilizzo dei dati e delle funzioni membro 375 6.15 Un sottile errore logico: restituire un riferimento a un dato membro private 380 6.16 L'assegnamento tra oggetti: la copia di default membro a membro 382 6.17 Ancora sul concetto di software riutilizzabile 384 6.18 Pensare in termini di oggetti : programmazione delle classi del simulatore [progetto opzionale] 384 Implementazione: visibilità 385 Implementazione: handle 386 Implementazione: i file di intestazione delle classi 386 Conclusione 395 Esercizi di autovalutazione 395 Risposte agli esercizi di autovalutazione 396 Esercizi 396 Capitolo 7: Le classi: seconda parte 399 7.1 Introduzione 399 7.2 Gli oggetti e le funzioni membro costanti 399 7.3 Il concetto di composizione: oggetti che diventano membri di altre classi 408 7.4 Le funzioni e le classi friend 413 7.5 Il puntatore this 416 7.6 L'allocazione dinamica della memoria: gli operatori new e delete 421 7.7 I membri static di una classe 423 7.8 Due concetti importanti: astrazione dei dati e occultamento delle informazioni 429 7.8.1Il tipo di dato astratto "array" 430 7.8.2 Il tipo di dato astratto "stringa" 431 7.8.3 Il tipo di dato astratto "coda" 431 7.9 Le classi container e gli iteratori 432 7.11 Pensare in termini di oggetti : l'implementazione delle classi del simulatore [progetto opzionale] 435 Una panoramica dell'implementazione 435 Implementazione del simulatore 436 Esercizi di autovalutazione 462 Risposte agli esercizi di autovalutazione 463 Esercizi 464 Capitolo 8: L'overloading degli operatori 467 8.1 Introduzione 467 8.2 L'overloading degli operatori: concetti fondamentali 468 8.3 Restrizioni 470 8.4 La progettazione delle funzioni operatore: funzioni membro o funzioni friend? 471 8.5 L'overloading degli operatori di inserimento/estrazione per l'I/O su stream 473 8.6 L'overloading degli operatori unari 476 8.7 L'overloading degli operatori binari 476 8.8 Progettazione della classe Array 477 8.9 Conversioni tra tipi diversi 489 8.10 Progettazione della classe String 490 8.11 L'overloading degli operatori ++ e ?? 502 8.12 Progettazione della classe Date 503 Esercizi di autovalutazione 508 Risposte agli esercizi di autovalutazione 508 Esercizi 509 Capitolo 9: L'ereditarietà 517 9.1 Introduzione 517 9.2 Le classi base e le classi derivate 519 9.3 I membri protected 521 9.4 Il cast dei puntatori a una classe base in puntatori a una classe derivata 521 9.5 Utilizzo delle funzioni membro 527 9.6 L'overriding di membri della classe base in una classe derivata 528 9.7 Ereditarietà di tipo public, protected e private 532 9.8 Classi base dirette e indirette 533 9.9 Utilizzo dei costruttori e dei distruttori nelle classi derivate 534 9.10 Conversione implicita di un oggetto di una classe derivata in oggetto della classe base 537 9.11 Il ruolo dell'ereditarietà nell'ingegneria del software 539 9.12 Composizione ed ereditarietà 540 9.13 Le relazioni "uses a" e "knows a" 540 9.14 Progettazione delle classi Point, Circle e Cylinder 541 9.15 L'ereditarietà multipla 548 9.16 Pensare in termini di oggetti : come sfruttare l'ereditarietà nel simulatore di ascensore [progetto opzionale] 553 Esercizi di autovalutazione 559 Risposte agli esercizi di autovalutazione 560 Esercizi 560 Capitolo 10: Le funzioni virtuali e il polimorfismo 563 10.1 Introduzione 563 10.2 I campi di tipo e le istruzioni switch 563 10.3 Le funzioni virtuali 564 10.4 Le classi base astratte e le classi concrete 565 10.5 Il polimorfismo 566 10.6 Progettazione di un libro paga elettronico 568 10.7 L'aggiunta di nuove classi e il binding dinamico 579 10.8 I distruttori virtuali 579 10.9 L'ereditarietà di interfaccia e di implementazione 580 10.10 L'implementazione di polimorfismo, funzioni virtuali e binding dinamico 588 Esercizi di autovalutazione 590 Risposte agli esercizi di autovalutazione 592 Esercizi 592 Capitolo 11: Gli stream di input/output del C++ 595 11.1 Introduzione 595 11.2 Gli stream 596 11.2.1 I file di intestazione della libreria iostream 597 11.2.2 Le classi e gli oggetti che effettuano l'input/output su stream 597 11.3 L'output su stream 599 11.3.1 L'operatore di inserimento nello stream 599 11.3.2 Utilizzo degli operatori di inserimento/estrazione in cascata 601 11.3.3 L'output delle variabili di tipo char* 602 11.3.4 L'output di caratteri tramite put 602 11.4 L'input da stream 603 11.4.1 L'operatore di estrazione dallo stream 603 11.4.2 Le funzioni membro get e getline 606 11.4.3 Altre funzioni membro di istream: peek, putback e ignore 608 11.4.4 L'I/O type-safe 608 11.5 L'input/output non formattato delle funzioni read, gcount e write 609 11.6 I manipolatori di stream 609 11.6.1 La base dei numeri interi su uno stream: dec, oct, hex e setbase 610 11.6.2 La precisione dei valori a virgola mobile: precision e setprecision 610 11.6.3 L'ampiezza dei campi: setw e width 612 11.6.4 I manipolatori definiti dall'utente 614 11.7 I valori di stato della formattazione 615 11.7.1 I flag di stato della formattazione 615 11.7.2 Gli zero in coda e i punti decimali: ios::showpoint 616 11.7.3 La giustificazione: ios::left, ios::right e ios::internal 617 11.7.4 Il riempimento dei campi: fill e setfill 619 11.7.5 La base dei numeri interi: ios::dec, ios::oct, ios::hex e ios::showbase 620 11.7.6 I numeri a virgola mobile e la notazione scientifica: ios::scientific e ios::fixed 621 11.7.7 Il controllo delle lettere maiuscole/minuscole: ios::uppercase 622 11.7.8 L'attivazione e la disattivazione dei flag di formattazione: flags, setiosflags e resetiosflags 622 11.8 I valori di stato degli errori in uno stream 624 11.9 Il collegamento di uno stream di output a uno stream di input 626 Esercizi di autovalutazione 626 Risposte agli esercizi di autovalutazione 629 Esercizi 631 Appendice A: Riepilogo degli operatori 633 Appendice B:L'insieme dei caratteri ASCII 635 Appendice C:I sistemi di numerazione 637 C.1 Introduzione 637 C.2 Usare i numeri ottali ed esadecimali per abbreviare i numeri binari 640 C.3 La conversione dei numeri ottali ed esadecimali in binari 642 C.4 La conversione da binario, ottale o esadecimale in decimale 642 C.5 La conversione da decimale a binario, ottale o esadecimale 643 C.6 I numeri binari negativi: la notazione in complemento a due 644 Esercizi di autovalutazione 646 Risposte agli esercizi di autovalutazione 647 Esercizi 648 Appendice D:Il C++ su Internet 649 D.1 Risorse 649 D.2 Tutorial 649 D.3 FAQ (risposte alle domande più comuni) 650 D.4 comp.lang.c++ 650 D.5 Compilatori 651 D.6 Standard Template Library 652 Tutorial 652 Riferimenti 652 FAQ 652 Articoli, libri e interviste 653 Software 653 Indice analitico 655
Da Java al C++ di INFN
Guida alla programmazione degli alberi in C++ di alessioluffarelli
Imparare C++ in 3 lezioni di INFN
Introduzione al C++ di nicetoad