2011-01-24 10 views
5

Eventuali duplicati:
C++ tutorial for experienced C programmer.C a C++: Transizione da una lingua all'altra

ho programma in un certo numero di lingue di frequente e sono state usando C++ ultimamente. Fondamentalmente le mie lezioni sono solo involucri attorno al puro codice C. Quasi come una struttura con metodi associati. Questo mi dà l'incapsulamento e la privacy che voglio per i miei dati. Ho una piccola gerarchia di classi e sto usando a malapena l'ereditarietà.

Ho familiarità con i concetti OO e so quali termini di ricerca utilizzare quando ho bisogno di scoprire un particolare concetto in questo senso. Tuttavia, come ho scoperto nella mia incursione nel mondo della programmazione, spesso le caratteristiche linguistiche che sono veramente utili sono nascoste al nuovo arrivato o al novizio, e i bit utili di cui ho bisogno sono già stati scritti e sono in una libreria da qualche parte liberamente disponibile (la maggior parte delle volte parte del framework - come in .NET).

Quale percorso suggeriresti per ottenere questa conoscenza vitale in C++ e fermarmi a reinventare la ruota (male).

+1

Io uso per fare esattamente questo, lo faccio ancora, ad eccezione del fatto che non uso molto più il C++. – Earlz

+3

http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list –

+1

Oh caro, il mio più grande cruccio. Fai finta di non sapere * qualsiasi cosa *, ora come impareresti il ​​C++? (Con un libro.) Ecco come si fa. Se pensi di sapere già qualcosa, basta contrassegnarlo come una coincidenza. Non si transita, si impara di nuovo. – GManNickG

risposta

4

Informazioni su STL se si prevede di utilizzare davvero C++ in futuro. Anche se le opinioni variano ampiamente, in particolare tra i duri a morire, penso che non ci sia assolutamente nessun problema nell'usare C++ come "C con gli oggetti".

Boost è anche molto bello.

MODIFICA: Nota i downvotes già in arrivo da die-hard. Gli acoliti C++ in realtà non amano sentire le persone sostenere l'uso del linguaggio come "C con oggetti". Resto fermo alla mia dichiarazione. Puoi scrivere codice abbastanza sfruttabile e commercialmente fattibile senza impazzire con un insieme di classi abilitate per RTTI, template e multiplicate. Ricorda BACIO.

+0

+1 per contrastare downvote. Non ha senso fare downvote solo perché non sei d'accordo con la risposta ... –

+1

@Jesse - in realtà, è esattamente PERCHE 'dovresti downvotare una risposta, quando pensi che sia un errore e poco utile. Questa risposta è fuorviante ed errata. Con la modifica in atto è quasi allettante contrassegnarla come inappropriata. –

+3

@par: anche nel 2011 è possibile spedire codice commerciale perfettamente valido da COBOL, ciò non significa che si dovrebbe. Dire che "può funzionare comunque" non è una buona ragione per persistere nel non approfittare di caratteristiche di laguna. Tieni presente che non stiamo parlando di "Devo attenermi alle linee guida sulla codifica della mia azienda che vietano l'RTTI?" ... stiamo parlando di "Come dovrei espandere la mia conoscenza delle tecniche di programmazione?", La risposta non è "Fai finta che tutte quelle caratteristiche non esistano", ed è per questo che stai facendo downvoted. – jkerian

1

Suggerisco il libro Il linguaggio di programmazione C++ per riempire gli spazi nella conoscenza base del C++ e BOOST come il primo posto in cui cercare le librerie esistenti che supportano la programmazione.

9

Questo è il modo sbagliato di utilizzare C++. Sarebbe meglio servire per prendere una copia di Accelerated C++ e leggerla. Sì, è un libro per principianti ma, a meno che tu non voglia continuare a trattare C++ come solo C con gli oggetti, devi concentrarti su come i programmatori C++ fanno le cose invece di limitarti a ciò che già sai. È necessario partire dall'inizio e creare una buona base in C++.

+0

Non sono d'accordo. Quando vai a scrivere, dici un algoritmo di quicksort o qualcosa del genere, quasi tutto il codice sarebbe lo stesso tra C e C++ appropriato. Non è necessario imparare come programmare da zero, solo come sfruttare appieno le funzionalità aggiuntive di C++. – Earlz

+7

Non quando _I_ scrive un algoritmo di quicksort. La mia implementazione in C++ sarebbe molto diversa dalla mia versione C. In realtà hai indicato un ottimo esempio perché coloro che continuano a pensare a loro come la stessa lingua sono destinati a fallire. –

+4

@Noah: un buon programmatore C può scrivere programmi migliori introducendo un piccolo C++ (come evidentemente fatto da Aran). Questo non è destinato al fallimento. Inoltre, non significa che ne tragga tutti i benefici, e certamente non significa che sia pronto a lavorare in team con altri programmatori C++ o su codice C++ che utilizza le funzionalità complete. Ma non c'è niente di intrinsecamente sbagliato in questo, e come fase evolutiva dell'esperienza degli sviluppatori, non è da condannare né deridere come "il modo sbagliato di usare il C++". È un umile inizio essere incoraggiato. La fine profonda del trattamento della piscina non è l'unico modo. –

0

Hai mai pensato di acquistare lo C++ Primer Plus? È un buon libro .

+1

Ho odiato quel libro. Niente downvote perché non hai torto di per sé: ma ho trovato che fosse prolisso e pieno di inutili e generiche cazzate di programmazione. Sai, come la maggior parte dei libri sulla programmazione che si aspettano di avere problemi a non bagnare il letto. – KitsuneYMG

+0

In realtà, questo è un libro * più cattivo * più conosciuto. : X – GManNickG

3

Scott Meyers' books sono un luogo ideale per C programmatore per cominciare C++.

+3

Non proprio. In realtà ho seguito questa strada, o ci ho provato, molti anni fa quando imparavo C++. I libri di Meyers sono buoni per qualcuno che ha già le nozioni di base in C++ ed è pronto per imparare alcune buone regole empiriche. C'è un sacco di cose che gli sviluppatori C devono sapere in anticipo. Certamente nessuno dei libri di Meyers poteva fare un UNICO libro per iniziare. –

+0

@Noah: abbastanza giusto, ma OP cercava "bit utili". – ThomasMcLeod

+0

Non so che i libri della Meyers siano i primi ad iniziare, ma sono assolutamente obbligatori di lettura e probabilmente arrivano secondi. Anche all'inizio non puoi sbagliare a leggerli, basta pianificare una rilettura una volta che hai più esperienza. – par

0

Leggere Meyers per suggerimenti specifici, ma anche Design ed evoluzione di Stroustrup. Quest'ultimo entra nella motivazione del perché il C++ è quello che è, e deriva molto da un punto di vista "come migliorare C". Per quanto riguarda "Il linguaggio di programmazione C++", la 3a edizione è molto lunga.Se riesci a trovare la 2a edizione, è molto più digeribile, anche se, ovviamente, a volte non è aggiornato (ma per lo più solo meno completo).

2

vi consiglio di leggere i libri:

"C++ norme di codifica: 101 regole, linee guida e best practice" --Sutter & Alexandrescu

"moderna C++ design: programmazione generica e Design Patterns applicata" - -Alexandrescu

E probabilmente qualcos'altro di Andrei Alexandrescu che puoi mettere le mani su.

Quindi, ci sono un certo numero di schemi di progettazione e idiomi di programmazione che rendono molto chiaro il motivo per cui "C con oggetti" è estremamente riduttivo. Solo per citarne alcuni: RAII (l'allocazione delle risorse è inizializzazione), PImpl (o Cheshire Cat), le funzioni di fabbrica, i puntatori intelligenti, Singleton, i tratti di tipo, i modelli di espressione, ecc. Quando ne sai qualcosa, non stai più programmando in C++ , ma in ++ C (perché ottieni un risultato che riflette effettivamente l'incremento su C).

Per non reinventare la ruota, come molti hanno già detto, assicuratevi di esplorare prima le possibilità nella libreria di modelli standard (STL) (che è molto più ricca di quanto si possa pensare) e quindi guardare Boost (www. boost.org) che ha librerie per molti scopi diversi e sono di altissima qualità (e alcune sono solo opere d'arte, come Spirit, Proto, Lambda e MPL). Dopodiché, c'è ovviamente una grande quantità di software open-source in C++, ma usalo con cautela: a volte è meglio reinventare una ruota che si adatti perfettamente alla tua applicazione piuttosto che usarne una che potrebbe non essere appropriata o abbastanza potente, o peggio, pieno di bug!

+1

Il libro Standard di codifica lo sta spingendo. Ricorda che l'OP conosce solo C a questo punto. L'uso di C++ è stato limitato all'aggiunta di funzioni membro alle strutture. Il libro Standard di codifica presuppone una conoscenza un po 'più ampia di quella. Potrebbe essere un buon risultato, ma come Meyers, non potrebbe essere un unico antipasto. Il libro di Alexandrescu è un materiale considerevolmente più avanzato. Può essere facile dimenticare quanto sono avanzati alcuni di questi materiali quando non sei più un principiante. Il moderno design C++ non aiuterà affatto un principiante. –