Dato che C ++ '11 è stato approvato, questo cambiamento Come un principiante C ++ impara la lingua? [chiuso]

21

Volevo imparare il C ++ per un po 'e ho preso AP Programming Programming in High School (quando era C ++ e non Java). Mi piace C e non ho trovato il tempo per imparare il C ++ o mi limiterò a ricorrere a C # dove sono molto più produttivo.

La mia domanda è questa: dato che C ++ '11 è stato approvato (anche se non so implementarlo completamente) questo cambia il modo in cui dovrei approcciare all'apprendimento del C ++? Possiedo C ++: il riferimento completo di Herb Schildt che è del 1998. Il nuovo standard approvato rende l'apprendimento da tale libri meno importanti di alcuni dei nuovi tutorial / libri che includono cose dallo standard? C'è qualche vantaggio nell'imparare dai libri più vecchi?

    
posta Jetti 16.08.2011 - 14:03
fonte

4 risposte

16

Assolutamente. In questi giorni tre cose che di solito si trovano nella lezione 2 dovrebbero spostarsi molto, molto più tardi:

  • stringhe come matrici di char *, i metodi strlen, strxxx e così via
  • matrici in generale e aritmetica del puntatore
  • elimina ciò che sei nuovo, elimina [] ciò che sei nuovo [] e persino i distruttori

Queste cose che di solito si trovano nella lezione 99 dovrebbero spostarsi molto, molto prima

  • i template come cose da usare (scrivi, non tanto)
  • std :: string
  • std :: shared_ptr < >
  • std :: vector < & gt ;, iteratori, altre raccolte

Il puntatore raw di Evey deve essere immediatamente assegnato a un wrapper di puntatore intelligente (vorrei iniziare con shared, e considerarlo univoco in seguito, poiché richiede la spiegazione dei riferimenti std :: move e rvalue). Fare ciò renderà l'apprendimento C ++ molto simile all'apprendimento di Java o C #, dove si impara la libreria contemporaneamente alla lingua. Ci vorrà anche molto lavoro di memoria e lascerà le persone meno preoccupate dei trucchi.

Lavorerei anche lambda nell'immagine la prima volta che volevamo iterare attraverso una raccolta e fare qualcosa per ogni elemento.

Dichiarazione di non responsabilità: sto scrivendo un corso C ++ per Pluralsight in questo momento e utilizzando questo approccio. L'ultimo modulo è "capire il codice di altre persone" ed è qui che inserirò le cose confuse come le stringhe char *, la gestione manuale della memoria, l'aritmetica dei puntatori e così via.

Aggiornamento: alcune persone hanno chiesto perché l'esistenza di C ++ 0x ispira insegnamenti che potrebbero essere stati insegnati con C ++ 03. Penso che sia un numero di cose:

  • puntatori veramente intelligenti, che sono amichevoli nella raccolta, eliminano la necessità di cose come "una serie di puntatori Employee" che ci hanno indotto a ricorrere sempre al nuovo / delete, al puntatore aritmetico ecc.
  • auto toglie il dolore delle dichiarazioni iteratore
  • lambda fa foreaching qualcosa che una persona normale farebbe
  • anche qualcosa di banale come l'analisi di >> elimina correttamente il trucco che sarebbe presente quando si dichiarano alcuni modelli di modelli
  • e così via

Per come la vedo io, ci sono cose che potrebbero essere cambiate nel modo in cui stavamo insegnando C ++ qualche tempo fa, ma alcuni di noi si sono trattenuti perché avevamo ancora bisogno della vecchia scuola per un ripiego o perché insegnava solo ha coinvolto molte conoscenze arcane.

    
risposta data 16.08.2011 - 15:21
fonte
9

Praticamente, sì. Il semplice fatto è che in C ++ 98 e 03, molte buone pratiche erano fondamentalmente inutilizzabili a causa della scarsa qualità del supporto linguistico per es. programmazione funzionale. Ora che i lambda esistono e funzionano, le persone tendono ad accettare le interfacce funzionali molto meglio di prima, e la programmazione generica è ancora più strong di prima.

Nel 1998, le persone stavano appena iniziando a scoprire come scrivere codice di alta qualità, sicuro e veloce usando C ++, e un sacco di codice era "C was Classes". In C ++ 11, è molto diverso - idiomi come copia e swap e la regola del tre (ora cinque) sono ben noti e definiti, e molti più tipi di gestione delle risorse sono diventati standard, come shared_ptr e unique_ptr dove gli Standard precedenti li lasciavano semplicemente come fori spalancati.

Puoi visualizzare questa domanda per un eccellente elenco di riferimenti materiale su C ++.

    
risposta data 16.08.2011 - 14:40
fonte
4

Non conosco il libro specifico che menzioni. Ma in generale si può dire che tutte le nozioni di base sulla sintassi C ++, i tipi di dati e OOP sono ancora vere. Lo stesso dovrebbe andare per le librerie STL che sono menzionate nella maggior parte dei libri principianti.

Anche se un libro vecchio come dal 1998 potrebbe aver perso alcuni aggiornamenti e sviluppi nello stile di programmazione C ++, accumulato nella comunità nel corso degli anni. Cercherò risorse leggermente più aggiornate. Ci sono più che sufficienti tutorial e documenti online gratuiti che dovrebbero fornire un buon inizio. Alcuni di essi potrebbero persino menzionare C ++ 0x.

C ++ 0x cambierà sicuramente molto su come i programmatori vedono e usano la lingua in futuro. Ma ciò influenzerebbe i progetti più complessi in cui le nuove funzionalità iniziano a dare un senso. Per un principiante questo non dovrebbe importare e puoi concentrarti sul fatto di sentirti a tuo agio con i concetti esistenti, è già abbastanza per imparare. La maggior parte dei libri per principianti non è molto approfondita nei modelli, ad esempio, quindi i nuovi modelli variadici non sono ciò che devi sapere ora.

Forse dai un'occhiata a un elenco di modifiche . Almeno alcuni concetti come intervallo basato su cicli appariranno molto probabilmente in tutorial anche per i principianti. Quindi vale la pena dare un'occhiata.

    
risposta data 16.08.2011 - 14:14
fonte
3

Naturalmente, per quanto riguarda le tecnologie correlate, essere sempre aggiornati con il materiale più recente è sempre una mossa intelligente, tuttavia, le modifiche introdotte in C ++ 11 non sono progettate per scuotere la barca. Se sei nuovo di C ++ (o programmazione in generale), questo non è qualcosa di cui mi preoccuperei.

Inoltre, se sei un programmatore professionista, puoi scommettere che lavorerai sul codice di qualcun altro in futuro, quindi c'è sempre un valore nella comprensione del modo in cui funzionano le cose, anche se nella pratica è una tecnica deprezzata.

    
risposta data 16.08.2011 - 14:19
fonte

Leggi altre domande sui tag