Passaggio da C # a C ++ e suggerimenti? [chiuso]

6

Ho utilizzato C# per un po 'di tempo e, per migliorare la mia carriera e ampliare la mia conoscenza della programmazione, voglio entrare in C++ . C# è molto utile e veloce da lavorare, ma dal momento che il mio team ed io realizzeremo progetti su larga scala, dovrò considerare di lavorare in un linguaggio di livello inferiore per diversi motivi. La maggior parte delle aziende commerciali utilizza C/C++ a causa di elevate prestazioni e portabilità. Ovviamente, C# non è necessariamente negativo rispetto a C o C++ , ma preferisco semplicemente avere uno strumento diverso per ogni lavoro.

Quindi leggo C ++ è più difficile perché è un linguaggio di basso livello, un codice macchina e non ha una gestione della memoria. Ma il fatto che sia un codice macchina riduce anche la quantità di memoria consumata. È difficile lavorare con la lingua, ma in un certo senso la difficoltà lo rende un linguaggio potente. È stato creato per essere veloce ed efficiente, codice macchina, ma questo rende più difficile capire e imparare "dal momento che è più vicino alla macchina".

Ho preso una decisione e voglio imparare C++ , quindi quali sono alcuni suggerimenti da tenere a mente durante l'apprendimento? È meglio evitare di entrare in cattive abitudini piuttosto che cercare di romperle più tardi, al sicuro che dispiaciuti.

Ho intenzione di utilizzare le risorse indicate qui , ma io preferirebbe qualsiasi raccomandazione personale, libri o guide online, possibilmente quelli che possono essere facilmente compresi da qualcuno che abbia una buona conoscenza di C# .

    
posta Dave 06.09.2013 - 17:15
fonte

3 risposte

17

In realtà ho fatto il contrario, da C ++ a C #. Mi sono davvero divertito con un buon design OO in un contesto C ++, quindi sento di poter parlare di questo okay.

Punte:

  • A differenza di C #, C ++ è in giro per un tempo lungo . Dagli anni '70. In quanto tale, ciò che costituisce il "buon C ++" dipende da chi lo chiedi e da quando sono stati coinvolti nella scrittura del C ++ e da quali libri hanno letto. Il linguaggio di programmazione C ++ di Bjarne Stroustrup è stato rivisto quattro volte, passando da un libro di 300 pagine nella prima edizione a un libro di 1500 pagine nel quarto. In poche parole, molto è cambiato nella vita della lingua, e quindi c'è molta storia e opinioni su come risolvere i problemi. C ++ 11 fa ancora di più lo stesso.
  • Scopri come utilizzare i puntatori e per cosa sono utili. Se puoi, prova a utilizzare i puntatori per lavorare direttamente con l'hardware.
  • La gestione della memoria in C ++ viene spesso gestita utilizzando una buona pratica chiamata RAII. jalf of StackOverflow fame ha un eccellente articolo su questo: Il significato di RAII . Inoltre, scopri come usare shared_ptr, auto_ptr e gli altri puntatori della famiglia "smart pointer". L'utilizzo di queste tecniche ti impedirà di incorrere in problemi di gestione della memoria.
  • Anche con le tecniche di cui sopra, potresti comunque incorrere in problemi di gestione della memoria, nel qual caso valgrind è super utile per sapere come uso (soprattutto massif - massif e ho avuto modo di essere buoni amici quando stavamo usando weak_ptrs in un modo funky in qualche codice).
  • C ++ ha un certo numero di regole di sintassi confuse (che i progettisti C # hanno cercato di evitare nella loro progettazione linguistica), molte delle quali se non seguite attentamente causeranno risultati confusi. Ad esempio, potresti comunemente vedere const className& come tipo di input dei parametri di funzione - ci sono ottime ragioni per questo estremamente dettagliate. Le domande frequenti C ++ di Marshall Cline sono inestimabili per questo.
  • C ++ ha un sacco di funzionalità, flessibilità e potenza, che è una buona cosa, ma spesso non rende le scelte del percorso del giardino le migliori per i nuovi utenti. Questo significa che se non stai attento, il tuo codice sarà orribile. Mi ci sono voluti ben 18 mesi per capirlo e rendermi conto di quanto fosse scadente il mio codice e perché stavo ottenendo recensioni negative del codice. Imparare a scrivere un'interfaccia in C ++ (suggerimento: cercare che cosa sia una classe base astratta) è cruciale per fare un grande codice. Non abbiate paura di replicare i buoni concetti e i costrutti di programmazione che avete appreso in C # tornando in terra C ++, quando possibile.
  • Scopri la programmazione basata su modelli. Scopri quali sono i suoi punti di forza e di debolezza e come si differenzia da C # generics.
risposta data 06.09.2013 - 17:39
fonte
7

È probabile che questo venga chiuso a causa di open-ended-ness, ma si spera che questo suggerimento sia abbastanza importante e abbastanza controverso da aiutare:

Sii consapevole della proprietà.

In C # (e in altre lingue con gestione automatica della memoria), quale oggetto possiede una variabile può essere un po 'sfocato. L'evento è proprietario dell'handler o "catcher" dell'evento? In C #, non importa. In C ++, il tuo programma morirà di una morte orribile, orribile (e spesso sottile) se non conosci chi possiede quel gestore.

Questa è la differenza fondamentale nel modo in cui è necessario progettare programmi e si manifesterà in modo sottile se non ci si presta a molto . Imparare a progettare intorno a chi possiede qual è la transizione più importante che devi realizzare, quindi concentrati su di essa in anticipo.

    
risposta data 06.09.2013 - 17:44
fonte
2

Penso che sia necessario fare un po 'di attenzione con il linguaggio che si sta utilizzando per descrivere C ++ (linguaggio di basso livello) e anche con alcune delle descrizioni tecniche (codice macchina) che vengono considerate imprecise.

Quindi devi capire perché vuoi davvero imparare una nuova lingua. Molte aziende usano C / C ++ e molti usano Java e molti usano Perl e Python e Scala e ... (alcuni usano persino Fortran). Forse hai in mente un'azienda, un settore o un progetto specifici? Se è puramente per ragioni di impiego, mi metterei in guardia contro di esso a meno che tu non abbia un modo per ottenere un'esperienza dimostrabile (non sono mai riuscito a utilizzare i miei progetti di tempo libero come esperienza in un'intervista). Scegli qualcosa che ti interessa, forse non sarà affatto OO; sarai più bravo a lungo termine con l'essere sinceramente interessato. Quindi pubblica il codice e guarda come va, facendo domande mentre vai, se è C ++ ci vorrà un po 'di tempo specialmente se vuoi entrare nella gestione della memoria!

    
risposta data 06.09.2013 - 17:45
fonte

Leggi altre domande sui tag