2010-03-31 12 views
14

Sono un programmatore Perl5 da 7 anni e sto cercando di imparare il C++ ora. Alcune delle sintassi C++ sono difficili da capire e da pensare in modo C++.Learning C++ come programmatore Perl

Per esempio: In Perl, potete mescolare i dati negli array

@array = (1,"string",5.355); 

È possibile assegnare un valore a una variabile scalare:

$var = 1; 
$var = "string"; 
$var = \$reference_to_scalar; 

ci sono molti esempi.

Un mio amico mi consiglia il libro "Thinking of C++" di Bruce Eckel, ma non ho alcun background in C e per me è difficile capire alcune cose.

Quindi la mia domanda è: potresti raccomandarmi un libro per questa situazione. Non voglio imparare C. Capisco OOP (sto diventando più familiare con C++ oop aswell), capisco il punto dei puntatori (e alcuni aritmetici) e riferimenti (ampiamente utilizzati in Perl).

Non ho bisogno di manuali per i manichini (ciò che è int, bool, double, if, while), ho solo bisogno di una direzione come imparare C++ dal punto di vista di un programmatore Perl, perché sono sicuro che non ci sono molti come me

Grazie in anticipo.

EDIT: Grazie per tutti i libri consigliati e le risposte, proverò con "Accelerated C++". Inizierò dall'inizio e cercherò di cambiare il mio flusso mentale in C++. Ho aggiunto il tag "principianti".

+0

Le domande sul sondaggio devono essere contrassegnate come wiki della comunità. –

+3

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

+0

Abbiamo appena avuto una domanda ieri in cui "Thinking in C++" conteneva un errore facilmente evitabile. http://stackoverflow.com/questions/2547789/shift-operators-in-c. Non l'ho letto, però, quindi non so se è tipico. –

risposta

10

"C++ Per programmatori Perl" è una richiesta piuttosto specifica. Dato che Perl astrae più di una macchina rispetto a C++, penso che un buon modo per iniziare sia dimenticare quello che sai su Perl e ottenere un normale libro C++.

Ad esempio, sembra ragionevole che sia necessario disporre di più tipi di dati in un array, poiché un array Perl è un costrutto di livello superiore rispetto a una serie di parole contigue in memoria. Se dovessi passare da un array in C++ a uno in Perl, direi che un array Perl è come un array C++ che contiene puntatori ai dati invece che ai dati (se questo è vero, non sono un programmatore Perl quindi Forse non è un array Perl è più simile a una struttura di dati dell'elenco collegato. In ogni caso, si ottiene l'idea.) Andando indietro, IMO, non è proprio la stessa cosa.

Per quanto riguarda il libro che consiglierei, ce ne sono molti buoni, quindi dipende dallo stile e dalla profondità che stai cercando. Penso che lo Accelerated C++ sia ottimo per salire a picco - è completo e copre un sacco di terreno senza inondarti di noiosi dettagli.

+1

Un array Perl è un elenco di scalari Perl. Gli scalari sono internamente un insieme di strutture (fondamentalmente un'unione di strutture). Dalla prospettiva di un programmatore Perl, uno scalare può contenere int, float, stringa o riferimento. Un riferimento Perl può contenere un puntatore a qualsiasi tipo di dati Perl. –

0

Here è possibile trovare una grande varietà di libri scaricabili liberi/online.

3

I secondo Thinking In C++. L'ho letto dopo aver conosciuto perl, e l'ho trovato molto buono.La seconda edizione non presuppone la conoscenza di C; ecco cosa dice sotto Prerequisiti nella prefazione:

Nella prima edizione di questo libro, ho deciso di assumere che qualcun altro aveva insegnato C e che si disponga ad almeno un livello di lettura di comfort con it. Il mio obiettivo principale era su semplificare ciò che trovavo difficile: il linguaggio C++. In questa edizione I ho aggiunto un capitolo che è un rapido introduzione a C, insieme al Thinking in C seminario su CD, ma io sono supponendo ancora che tu abbia già un tipo di esperienza di programmazione . Inoltre, proprio come si impara molte nuove parole intuitivamente da vederli nel contesto di un romanzo, è possibile per imparare molto su C dal contesto in cui viene usato nella resto del libro.

Come diceva Danben, devi semplicemente "dimenticare ciò che sai di perl". È utile conoscere Perl solo perché è un altro linguaggio di programmazione (simile a C, anche), ma non è neanche lontanamente simile a "imparare le differenze".

Inoltre: Thinking In C++ è gratuito per la versione elettronica.

0

In realtà, dal momento che conosci già una lingua imperativa, l'apprendimento di C non ti richiederà molto tempo. Le basi sono tutte uguali - se le istruzioni, mentre i cicli, i cicli ecc. Anche il modo in cui gli spazi dei nomi sono organizzati sono simili (anche se le budella ovviamente sono diverse.) Si potrebbe voler sovrascrivere un po 'della gestione dei puntatori, come C++ fa i riferimenti in modo leggermente diverso, ma non ti faresti alcun danno raccogliendo e leggendo una copia di K&R (the official C reference) almeno una volta. (Ogni programmatore decente dovrebbe avere una copia sulla sua libreria come riferimento, comunque.)

Quindi, prendi una recente edizione di Stroustrup e prendi possesso di essa, assicurandoti di lavorare attraverso gli esercizi. Alcuni concetti potrebbero essere un po 'estranei a una mente orientata al Perl, ma non sarà troppo strano. Se incontri un particolare concetto che trovi difficile, post di nuovo su SO e ci saranno molte persone felici di raccontarlo!

K&R http://upload.wikimedia.org/wikipedia/en/e/e1/Kr_c_prog_lang.jpg Stroustrup http://www.research.att.com/~bs/3rd_front.jpg

+0

Non vedo perché questo è stato downvoted. Questi sono i due libri essenziali per C e C++ - anche se impari da qualcos'altro (ad esempio, C++ accelerato è eccellente, come raccomandato in un'altra risposta), questi due sono i migliori riferimenti per la lingua che puoi ottenere in forma di stampa. – Ether

+2

probabilmente perché hai suggerito di imparare prima C. Questo è scoraggiato dai programmatori C++ esperti. Stavo pensando di farti downvoting per la stessa ragione, ma non penso che la tua risposta meriti di essere inferiore a -1. –

6

ho cercato di imparare il C++ dal "Pensare in C++" libro. L'ho trovato molto, molto difficile da imparare.

una migliore libro per qualcuno a partire dal C++ è "C Accelerated ++: Programmazione pratica con l'esempio" di Andrew Koenig e Barbara E. Moo

+0

Questo è sicuramente un ottimo libro di istruzioni che si tuffa nell'uso di C++ come C++ piuttosto che come un "superset di C". –

0

Il libro Stroustrup è un po 'difficile quando si impara la lingua, la sua migliore per prova un altro libro e usa il libro Stroustrup come riferimento.

+0

Ho imparato C++ da Stroustrup durante la mia pausa natalizia un anno; alcuni dei capitoli vanno un po 'lentamente, ma se uno già conosce già una o due lingue, questa strada va bene. – Ether

10

Non perdete tempo con l'apprendimento C a meno che non vuoi sapere C. Programmazione in C++ è niente affatto come la programmazione in C. Mi rendo conto che la maggior parte dei libri e gli insegnanti sostengono il contrario, ma si sbaglia di grosso. Dovresti cercare le eccezioni, come il già citato, "Accelerated C++."

Non troverete tutti i libri che vi aiuterà a scrivere il codice come il codice che avete appena mostrato. Perl è un linguaggio tipicamente debolmente scritto e il C++ è esattamente l'opposto: un linguaggio fortemente tipizzato.Ci sono, tuttavia, modi per ottenere una sorta di ciò che stai mostrando nel tuo post in vari costrutti boost come la variante e la tupla.

Suggerirei di imparare C++ come linguaggio totalmente indipendente prima di entrare in quel tipo di cose. Non imparare C++ come programmatore Perl, impara come un newb completo. Potresti essere annoiato con i primi capitoli, ma alla fine avrai una migliore comprensione dello stile e dei poteri esclusivi di C++ rispetto a quelli unici di Perl. Non ho visto alcun libro di "Xlanguage for Ylanguage" che ti porterà lì.

6

Ho attraversato il processo opposto. Una delle prime cose che ho imparato è che mentre si scrive codice Perl simile a C o C++, non si dovrebbe. Lo stesso vale per te. Probabilmente puoi trovare un modo per scrivere il codice C++ Perl-ish, ma non preoccuparti. Le lingue sono troppo diverse. Devi imparare come scrivere codice C++ come programmatore C++. Diversi libri di merci sono già stati suggeriti. Penso che dovresti potenziarlo per trovando un mentore. Riceverai un feedback immediato se stai facendo le cose nel modo giusto o sbagliato. È inoltre possibile controllare lo C++ FAQ Lite, in particolare i capitoli 28 e 29 sui problemi relativi ai nuovi programmatori C++.

La più grande differenza è che C++ è fortemente digitato. Ogni variabile ha un tipo e non cambia. Il tuo codice Perl di esempio è tecnicamente possibile in C++, ma richiede una libreria aggiuntiva che non sono ancora sicuro di essere pronto per il momento. Invece, il modo C++ è pensare a una raccolta di elementi misti ma correlati come il loro nuovo tipo: uno struct o class.

Un'altra ottima opzione è quella di pubblicare domande specifiche sul C++ qui su SO. Incoraggiamo le domande a livello principiante purché siano formulate in modo chiaro e mostrino uno sforzo precedente.

+0

Grazie per i suggerimenti.Cercherò di non pensare in modo perl (c'è più di un modo per farlo). Ho trovato che in C++ il tuo modo di pensare è più severo di Perl. Spero che questa comunità mi aiuti con ulteriori domande. – meneldor

3

Lavoro con Perl esclusivamente per il mio lavoro di giorno e programma C++ per divertimento nelle notti e nei fine settimana. Richiedono set mentali totalmente diversi. Stai meglio avvicinandoti a C++ come programmatore noob e imparalo da 'Hello World' in su. Certo, puoi rintracciare rapidamente concetti generali come questi tipi di dati, ma fai comunque abbastanza attenzione per conoscere il tuo breve dal tuo lungo e il tuo riferimento dal tuo puntatore.

Eviterei di imparare C prima, a meno che tu non abbia davvero bisogno di sapere C. La gestione dei caratteri in C è un dolore e non adatto a ciò che sospetto che tu voglia fare. La classe String in C++ è tua amica: impara, vivi amala!