2010-01-16 11 views
9

Dato che ho usato principalmente i linguaggi di script nel passato ma ora voglio passare al livello "ad alte prestazioni" ho deciso di imparare C++ qualche tempo fa.Apprendimento C++ giusto?

Ho guardato alcuni tutorial per "principianti" e ho comprato un libro di riferimento di OREilly C++ (è davvero utile). Il mio problema è che ora conosco tutte le basi, ma non sono abbastanza bravo da programmare un gioco più complicato, per esempio, ancora.

  • Devo ottenere uno di quei libri spessi di C++ per ulteriore apprendimento?
  • Utilizzerò principalmente C++ su Windows. Quali API oltre a Win32 sono importanti per me?
  • Il mio obiettivo sarebbe quello di scrivere un piccolo interprete per un linguaggio di programmazione di cui ho pensato: l'ho già gestito in diversi linguaggi di scripting, quale conoscenza API/libreria ho bisogno in C++ per scriverne uno?

risposta

8
  1. Non è necessario un libro di spessore: è necessario uno buono. Ottieni Accelerated C++, scritto da Koenig & Moo, due dei team di sviluppo C++ originali.

  2. Dipende da ciò che si desidera fare.

  3. Non hai bisogno di nulla: puoi scrivere un interprete o compilatore perfettamente funzionante usando solo la libreria C++ Standard. Vedi questo SO question per molte informazioni in quest'area.

+0

Vorrei raccomandare anche l'efficace C++ e l'efficace stl. – Rick

+0

Amo la citazione che hanno su quel libro: "Chiunque legga solo questo libro e lavori attraverso gli esempi e gli esercizi avrà le stesse competenze di molti programmatori professionisti". Purtroppo, questo non sta dicendo molto. :-) – Ken

1

Ho sempre trovato che imparare una lingua da un libro è piuttosto difficile e che dopo aver compreso le basi dovresti iniziare a programmare. Quindi, invece di prendere in mano un manuale spesso, verificherei qualcosa come http://www.cprogramming.com/tutorial.html#advanced o semplicemente google per il tutorial C++ e qualcosa che vorresti provare a fare.

+3

È necessario evitare tutti i tutorial in linea di C++ come la piaga - sono equamente sbagliati o sbagliati. –

+1

@Neil: un po 'forte. Ci sono buoni punti in diversi tutorial, ma sono d'accordo sul fatto che il rapporto segnale/rumore sia basso, o addirittura negativo, con molti suggerimenti attivamente nocivi. –

+0

Devi solo trovare alcuni che sono buoni. Come i libri, non tutti sono perfetti. La chiave è lavorare su alcuni esempi di vita reale. Dopo aver letto abbastanza libri, non guadagni nulla senza farlo e sperimentando con esso. – Joe

0

Per C++ su Windows, imparare sicuramente Microsoft Foundation Classes (MFC). Senza MFC, devi impiantare da solo tutte le cose dell'API di Windows, che è più C che C++ e può essere un bel problema.

Si consiglia inoltre di ottenere, imparare e utilizzare le librerie C++ boost. Non sono specifici per Windows, ma sono un'ottima risorsa per chiunque.

+10

MFC è tecnologia morta. Se vuoi scrivere GUI di Windows, usa Qt o rinuncia a C++ e usa C#. –

+0

Si deve notare (lo so, che tu lo sai, Neil), che conoscere bene Qt ti permette di sviluppare applicazioni di interfaccia grafica multipiattaforma con quello che, penso, potrebbe essere descritto come uno sforzo minimo possibile (assumendo che stiamo solo parlando su C++ qui). – shylent

+0

@Neil: una sostituzione più diretta è WTL (scelta di recente da Chrome), e immagino che alcune caratteristiche strane/interessanti supportate da Windows siano più difficili da utilizzare in Qt a causa della mancata corrispondenza delle interfacce. Certo, faccio il mio, quindi cosa so. :) –

1
  • Un buon (e) libro sottile per iniziare in C++ è Accelerated C++ di Koenig e Moo.
  • Principalmente faccio programmazione in Linux, ma ho sentito un sacco di cose brutte su MFC, quindi proverei a trovare una libreria GUI diversa.
  • Una volta che si è al passo con alcune delle parti più complicate della sintassi C++, dare un'occhiata alle librerie Boost.Spirit per la generazione di parser. Le varie librerie Boost forniscono estensioni molto utili alla libreria standard.
1

Onestamente, nell'apprendimento del C++ non ho mai preso un libro (non fiammante per favore). Il miglior consiglio che posso dare è quello di andare a this page e seguire il tutorial. Copre la maggior parte del linguaggio C++ (leggi: caratteristiche più comuni) e lo mantiene il più semplice possibile. Per quanto riguarda le API che sono importanti ... beh, è ​​una questione di preferenza. Nessuno toolkit/api ha davvero "vinto", ma Qt, GTK-- (gtkmm) e wxWidgets sono tutti grandi giocatori. E oltre alle GUI, probabilmente vorrai imparare sia le API raw di winsock2 e di threading sia le interfacce di threading e di rete della libreria boost.Sono d'accordo sul fatto che MFC stia morendo e C# per lo sviluppo di sole sta assumendo un ruolo sempre più grande (anche su Linux/mono C# sta iniziando a prendere piede ... lentamente).

Inoltre, il modo migliore per imparare una lingua è codificare. Quindi non leggere solo una tonnellata intera - senza esperienza pratica non imparerai mai la lingua. Fai domande, rispondi a quelle che puoi e scrivi tutorial per te, se non altro. Annotare ciò che hai imparato è un ottimo riferimento, e il processo di raddrizzare tutto nella tua testa per scriverlo in un modo che un'altra persona può comprendere da solo è un ottimo modo per rafforzare i concetti. In un modo strano, ma apparentemente a ritroso, ho trovato che il modo migliore in cui imparo la programmazione è di aiutare gli altri con le loro domande.

@ Neil- non sono d'accordo sul fatto che le esercitazioni in linea siano "completamente sbagliate". Se non altro, lo stile che ti insegnano potrebbe essere orientato alla leggibilità piuttosto che all'ottimizzazione, il che è un'opzione in-mio-non-così-umile. Nella mia esperienza limitata ho trovato cplusplus.com un riferimento go-to per praticamente tutto.

In particolare, per rispondere alle vostre domande: 1. Non è necessario alcun libro di spessore. Ho sentito che i più sottili possono essere utili come riferimento rapido, però.

  1. È completamente soggettivo e dipende dal tuo obiettivo. Le librerie di rete e multithreading di Boost sono probabilmente un buon inizio.

  2. tra std :: string, std :: stringstream e getline (std :: istream &, std :: stringa &) si dovrebbe essere abbastanza buono. C++ ha un sacco di funzionalità integrate, ma non è troppo gonfio/enorme/impossibile da imparare. Approfittane. Tutto il parsing è già integrato.

2

Impara con i libri. Il C++ è un linguaggio complesso. Il mio suggerimento è di iniziare con un'introduzione piuttosto rapida e una panoramica generale dei principali paradigmi di programmazione supportati da C++: OOP e programmazione generica: C++ accelerato.

Quando finisci questo libro, puoi andare con i due volumi di Bruce Eckel's Pensando in C++ che sono molto dettagliati.

Per la programmazione dell'interfaccia utente, il miglior toolkit C++ è Qt ed è pronto per la multiplaform. Puoi leggere "C++ GUI Programming With Qt4" (la prima edizione è scaricabile gratuitamente, basta google). Se vuoi attaccare all'API C++/Windows, impara la libreria di modelli di Windows, anche se potrebbe essere un po 'difficile a causa della mancanza di documentazione ufficiale (anche se ci sono buoni tutorial in rete). WTL è la strada da percorrere per creare applicazioni molto piccole e leggere (le DLL Qt dall'altra parte, hanno bisogno di pochi MB ciascuna).

0

Mi raccomando Stroustrup's Intro C++ book. Copre C++ e STL in un modo molto accessibile.

Dopodiché potresti prendere in considerazione l'idea di consultare libri su Qt, un toolkit GUI multipiattaforma o WTL o MFC per Windows. Potresti fare .NET + C++, ma sarebbe molto da imparare. Nella mia esperienza con Qt e MFC, i libri non hanno aiutato molto. Manomettere app di esempio, creare piccole app solo per testare un tipo di funzionalità e frugare tra i documenti era l'unico modo in cui riuscivo a capovolgerla. I libri che tendevo a semplicemente sorvolare troppo - non valevano i soldi.

1

Per favore, per Pete, non usare direttamente l'API Win32. Ti dipingerai nell'angolo di Microsoft.Ci sono un sacco di librerie multipiattaforma là fuori è possibile utilizzare invece:

  • libreria standard C++: stringhe, file di I/O, contenitori, algoritmi
  • Boost per la roba di tutti i giorni hanno lasciato fuori della libreria standard : analizzando, networking, threading, puntatori intelligenti, pool di memoria, data/ora, matrici, ecc. Le librerie di boost vengono sottoposte a peer-review prima di essere accettate e di alta qualità. Boost è il terreno fertile per le biblioteche che alla fine diventeranno parte del prossimo standard C++.
  • GUI Toolkit: Qt e wxWidgets sono molto maturi e ampiamente utilizzati. Ce ne sono molti altri