PDA

View Full Version : C++ vs C#


vendettaaaaa
26-11-2012, 12:16
Ciao,
sto studiando il C# sul libro "Microsoft Visual C# 2010 Step by Step" di John Sharp (Microsoft Press), avendo una conoscenza del C++ che non definirei buona ma neanche basilare, ci faccio calcoli numerici e ho creato una calcolatrice in Qt.

Quello che vorrei sapere è: c'è un libricino (o meglio, un articolo su qualche sito/blog) che riassuma le differenze tra C++ e C#? Io me le sto scrivendo a mano, capitolo per capitolo, ma vorrei un elenco completo visto che non ci sarà scritto tutto in questo libro...
Grazie!

with L920

!fazz
26-11-2012, 13:58
Ciao,
sto studiando il C# sul libro "Microsoft Visual C# 2010 Step by Step" di John Sharp (Microsoft Press), avendo una conoscenza del C++ che non definirei buona ma neanche basilare, ci faccio calcoli numerici e ho creato una calcolatrice in Qt.

Quello che vorrei sapere è: c'è un libricino (o meglio, un articolo su qualche sito/blog) che riassuma le differenze tra C++ e C#? Io me le sto scrivendo a mano, capitolo per capitolo, ma vorrei un elenco completo visto che non ci sarà scritto tutto in questo libro...
Grazie!

with L920

libricino? sono due linguaggi completamente diversi basati su paradigmi completamente completamente diversi, sono due cose talmente diverse che il libricino diventa un enciclopedia

vendettaaaaa
26-11-2012, 15:31
libricino? sono due linguaggi completamente diversi basati su paradigmi completamente completamente diversi, sono due cose talmente diverse che il libricino diventa un enciclopedia
Caro amico, non voglio un resoconto completo dalla a alla z, ma un elenchino delle differenze più evidenti nell'uso frequente, che possa servirmi ad esempio a portare la mia calcolatrice dal C++/Qt al C#/.NET, così da farla funzionare sul mio nuovo Lumia. Che poi magari debba essere riscritta daccapo per il nuovo paradigma, chi lo sa, forse tu, ma mi accontento di una conversione "di primo tentativo" grossolana visto che le performance non sono un fattore cruciale per un tale programma.
Nella tua enorme esperienza di programmatore ti sei mai imbattuto in documenti simili a quello che cerco? Se sì, mi lasceresti un link, un nome di autore, un indizio criptato? Non mi pare di chiedere la luna.

!fazz
26-11-2012, 16:46
Caro amico, non voglio un resoconto completo dalla a alla z, ma un elenchino delle differenze più evidenti nell'uso frequente, che possa servirmi ad esempio a portare la mia calcolatrice dal C++/Qt al C#/.NET, così da farla funzionare sul mio nuovo Lumia. Che poi magari debba essere riscritta daccapo per il nuovo paradigma, chi lo sa, forse tu, ma mi accontento di una conversione "di primo tentativo" grossolana visto che le performance non sono un fattore cruciale per un tale programma.
Nella tua enorme esperienza di programmatore ti sei mai imbattuto in documenti simili a quello che cerco? Se sì, mi lasceresti un link, un nome di autore, un indizio criptato? Non mi pare di chiedere la luna.

il problema è che c'è un mondo di differenze un elenco esaustivo non è possibile farlo perchè sarebbe praticamente un doppio manuale di programmazione, documenti del genere non li ho mai visti altrimenti te li avrei girati senza problemi ma tutto dipende da cosa ti serve è una cosa che può diventare molto tediosa o specifica oppure rimanere generica e ad alti livelli.

Comunque in commercio si dovrebbero trovare dei manuali di programmazione specifici per il passaggio di linguaggio prova a darci un occhiata

cmq rimanendo in tema di quello che dici (ovvero c++ e qt vs c#)

inanzitutto bisogna partire con il dire che non conosco minimamente i vincoli dell'sdk di windows phone (non sono tanto i limiti del linguaggio quanto quelli del framework)

comunque per fare un breve elenco si può dire che ad esempio

c# è interpretato c++ compilato
c++ gestire l'ereditarietà multipla c# solo la singola a meno di workaround
la creazione delle interfacce utenti è completamente diversa e anche le interazioni tra gli oggetti della gui
c# ha il garbage collector
ecc ecc

[Kendall]
26-11-2012, 16:47
Caro amico, non voglio un resoconto completo dalla a alla z, ma un elenchino delle differenze più evidenti nell'uso frequente, che possa servirmi ad esempio a portare la mia calcolatrice dal C++/Qt al C#/.NET, così da farla funzionare sul mio nuovo Lumia. Che poi magari debba essere riscritta daccapo per il nuovo paradigma, chi lo sa, forse tu, ma mi accontento di una conversione "di primo tentativo" grossolana visto che le performance non sono un fattore cruciale per un tale programma.
Nella tua enorme esperienza di programmatore ti sei mai imbattuto in documenti simili a quello che cerco? Se sì, mi lasceresti un link, un nome di autore, un indizio criptato? Non mi pare di chiedere la luna.

Allora, vengo bene o male da una situazione similare alla tua. Diciamo questo, a livello di programma calcolatrice se non è niente di particolarmente complesso facile che sia ben più laboriosa la trasposizione della parte grafica nonchè della gestione eventi che non il trasporre le classi legate alla logica.

A livello generale diciamo che definirlo un linguaggio totalmente diverso come approcio rispetto al C++ non mi trova propriamente daccordo. È un linguaggio sicuramente per molti aspetti diverso, decisamente più moderno (non per questo migliore in assoluto) quindi si avvale di una serie di strumenti sconosciuti al C++, una gestione dei tipi secondo me più valida, un sistema di garbage collector, una predisposizione per la logica degli eventi e molte altre cosine che se viste nel dettaglio aumentano a dismisura le differenze.
Se poi però si parte dalle basi del linguaggio come stai facendo tu (per quando riguarda il C#) e si procede per step vedrai che ti sarà estremamente naturale passare dal C++ al C#. Una serie di differenze comunque le trovi nel canale MSDN, se la trovo te la posto...

vendettaaaaa
26-11-2012, 18:10
Ok vi ringrazio, più avanti trascriverò la mia lista (che è solo agli inizi) per farvi capire meglio cosa intendo :D

marco.r
26-11-2012, 21:05
Caro amico, non voglio un resoconto completo dalla a alla z, ma un elenchino delle differenze più evidenti nell'uso frequente, che possa servirmi ad esempio a portare la mia calcolatrice dal C++/Qt al C#/.NET, così da farla funzionare sul mio nuovo Lumia. Che poi magari debba essere riscritta daccapo per il nuovo paradigma, chi lo sa, forse tu, ma mi accontento di una conversione "di primo tentativo" grossolana visto che le performance non sono un fattore cruciale per un tale programma.
Nella tua enorme esperienza di programmatore ti sei mai imbattuto in documenti simili a quello che cerco? Se sì, mi lasceresti un link, un nome di autore, un indizio criptato? Non mi pare di chiedere la luna.

Ho avuto modo di lavorare sia con le QT (in C++) che con Silverlight (in C#), anche se in entrambi i casi per il desktop e non per il telefono. Sono due approcci talmente diversi che non val neanche la pena di star li' a far confronti. Prenditi un libreo su C#, uno sullo sviluppo per Windows phone e parti da zero, secondo me ci metti meno.

lorenzo001
26-11-2012, 21:17
Ok vi ringrazio, più avanti trascriverò la mia lista (che è solo agli inizi) per farvi capire meglio cosa intendo :D

Sono curioso di vederla ...

vendettaaaaa
26-11-2012, 21:43
Sono curioso di vederla ...
Ecco le foto delle 3 paginette che finora ho riempito con le cose che mi hanno colpito, leggendo questo libro sul C#:
http://sdrv.ms/Re5bLl
http://sdrv.ms/TZAe8f
http://sdrv.ms/YknekY
Quello che cerco io son differenze più che altro di sintassi. Ad esempio, nella prima foto si vede che in C++ è valido scrivere
if (myInt)
perchè se un int è diverso da 0 risulta vero, mentre in C# è obbligatorio scrivere esplicitamente un'espressione booleana che coinvolge gli int:
if (myInt != 0)
Oppure ho scoperto che è possibile scrivere cicli for con più indici:
for (int i = 0, int j = 0; i < 10, j < 5; ++i, ++j)
anche se mi sembrano un po' error prone...
E altre cose così. Ovviamente sulla lista ci sono anche altre differenze, di struttura del linguaggio (no metodi "globali", tutto incapsulato in una classe, ecc) ma per convertire la mia calcolatrice mi serve anche tener d'occhio le subdole variazioni sintattiche :)

[Kendall]
26-11-2012, 21:53
Secondo me l'approccio non`è propriamente ideale. Il fatto che ci si trovi bene a passare da C++ e C# non significa che siano linguaggi da affrontare in maniera analoga. Ora come ora mi sembra che tu stia cercando di convertire solo la sintassi, quando dovresti invece imparare a programmare in C#.

vendettaaaaa
26-11-2012, 21:59
;38609393']Secondo me l'approccio non`è propriamente ideale. Il fatto che ci si trovi bene a passare da C++ e C# non significa che siano linguaggi da affrontare in maniera analoga. Ora come ora mi sembra che tu stia cercando di convertire solo la sintassi, quando dovresti invece imparare a programmare in C#.
Sto leggendo un libro di C# e nel mentre mi annoto le differenze. Sono solo all'8° capitolo e non sono ancora entrato nel vivo del linguaggio, bensì sono i tipici capitoli introduttivi alla programmazione. Non così basilari, ma per facilitare la transizione da un linguaggio all'altro. Il vero C# sarà spiegato più avanti, quando ci arriverò me lo studierò per bene, non voglio solo tradurre la sintassi :D
Come detto nel 1° post, vorrei una lista tipo la mia ma completa, se esiste.

[Kendall]
26-11-2012, 22:06
Sto leggendo un libro di C# e nel mentre mi annoto le differenze. Sono solo all'8° capitolo e non sono ancora entrato nel vivo del linguaggio, bensì sono i tipici capitoli introduttivi alla programmazione. Non così basilari, ma per facilitare la transizione da un linguaggio all'altro. Il vero C# sarà spiegato più avanti, quando ci arriverò me lo studierò per bene, non voglio solo tradurre la sintassi :D
Come detto nel 1° post, vorrei una lista tipo la mia ma completa, se esiste.

Non credo esista perchè come ti dicevo non è un metodo che trovo molto azzeccato. Se è solo una questione di sintassi non pensare al C++ e leggiti libri come C# In a Nutshell (eccezionale se hai già una esperienza mediocre di programmazione), entra nel mondo del linguaggio per quel che è e non per le differenze che ha rispetto ad altro. L'esperienza nel C++ ti sarà utile, ma solo per la familiarità con i costrutti e le forme sintattiche, tutto qua.

lorenzo001
26-11-2012, 22:09
Ognuno può approcciare come vuole alla programmazione ma questa tua guida, fidati, non ha molto senso.

vendettaaaaa
26-11-2012, 22:39
Ok mi fido, ma continuerò visto che l'ho cominciata. Più che altro trovare le differenze mi aiuta a ricordare cosa c'è in comune e mi risparmia di dover memorizzare cose nuove.
Esempio: il costrutto switch è uguale al C++, tranne che accetta string e...per un'altra differenza che non mi sono annotato, infatti non ricordo :D Cmq detto questo, in 2 secondi ho imparato a far lo switch col C#...non che ci voglia molto, ma come modo di studiare mi si addice :)

LS1987
26-11-2012, 22:44
Con C # se vuoi creare un'interfaccia grafica ti conviene usare Visual Studio.

[Kendall]
26-11-2012, 22:51
Ok mi fido, ma continuerò visto che l'ho cominciata. Più che altro trovare le differenze mi aiuta a ricordare cosa c'è in comune e mi risparmia di dover memorizzare cose nuove.
Esempio: il costrutto switch è uguale al C++, tranne che accetta string e...per un'altra differenza che non mi sono annotato, infatti non ricordo :D Cmq detto questo, in 2 secondi ho imparato a far lo switch col C#...non che ci voglia molto, ma come modo di studiare mi si addice :)

Beh come vuoi... Ma vedrai :p

Comunque nel C# non puoi passare da un'etichetta case all'altra semplicemente non mettendo l'istruzione break. A parte in un caso particolare cioè quando una determinata etichetta è proprio vuota (non ha alcun corpo né break).
Nel C++ invece una etichetta case può avere un corpo senza un successivo break, e in questa maniera passa direttamente l'istruzione all'etichetta successiva.
Non so se mi sono spiegato bene :)

vendettaaaaa
26-11-2012, 23:30
;38609735']Beh come vuoi... Ma vedrai :p

Comunque nel C# non puoi passare da un'etichetta case all'altra semplicemente non mettendo l'istruzione break. A parte in un caso particolare cioè quando una determinata etichetta è proprio vuota (non ha alcun corpo né break).
Nel C++ invece una etichetta case può avere un corpo senza un successivo break, e in questa maniera passa direttamente l'istruzione all'etichetta successiva.
Non so se mi sono spiegato bene :)
Sì lo so, queste son cose base :D Vabbè mi son spiegato male!

van9
29-11-2012, 13:06
Ecco le foto delle 3 paginette che finora ho riempito con le cose che mi hanno colpito, leggendo questo libro sul C#:
http://sdrv.ms/Re5bLl
http://sdrv.ms/TZAe8f
http://sdrv.ms/YknekY
Quello che cerco io son differenze più che altro di sintassi. Ad esempio, nella prima foto si vede che in C++ è valido scrivere
if (myInt)
perchè se un int è diverso da 0 risulta vero, mentre in C# è obbligatorio scrivere esplicitamente un'espressione booleana che coinvolge gli int:
if (myInt != 0)
Oppure ho scoperto che è possibile scrivere cicli for con più indici:
for (int i = 0, int j = 0; i < 10, j < 5; ++i, ++j)
anche se mi sembrano un po' error prone...
E altre cose così. Ovviamente sulla lista ci sono anche altre differenze, di struttura del linguaggio (no metodi "globali", tutto incapsulato in una classe, ecc) ma per convertire la mia calcolatrice mi serve anche tener d'occhio le subdole variazioni sintattiche :)

Puoi trovare quello che cerchi qui:
http://msdn.microsoft.com/en-us/library/yyaad03b(v=vs.90).aspx

Anche se trovo lodevole l'iniziativa (denota interesse e dedizione, e questo non è mai male), è meglio farti notare subito che quel documento deve essere per te più una momentanea "curiosità" che non una guida allo studio di quali-che-siano certe differenze che noti/incontri. Quello che voglio dire è che queste notevoli somiglianze nelle due sintassi ti stanno traendo in inganno, facendoti concentrare prematuramente su questioni che a questo punto potresti ignorare per dedicarti invece ad argomenti ben più interessanti e sostanziosi.

Nel tuo caso, sarebbe molto più proficuo:

- continuare a studiare e praticare (leggi: scrivere molti programmi!) uno solo dei due linguaggi , e...

- farsi domande di carattere più generale (cosa c'è "dietro" una certa sintassi, la grammatica nei linguaggi formali, cosa è un modello computazionale, ...), anche se inizialmente solo ad un livello introduttivo.

Quando si hanno più esperienza e maggiori conoscenze, certi raffronti acquistano un significato completamente diverso e diventano a quel punto si produttivi ed interessanti.


imparare inizialmente da più linguaggi e relativi diversi modelli computazionali è possibile, e anzi sarebbe auspicabile se si avesse a disposizione chi ti guida nel farlo. Per l'autodidatta senza guida però è un percorso che rischia di produrre più confusione che benefici.

idoido
29-11-2012, 21:03
opinione personale: facendo in questo modo non comprendi le potenzialità di C#, che non sono la differenza della sintassi o il poter fare dei cicli multipli, ma il fatto di avere dietro il .NET Framework e capirne le potenzialità.

vendettaaaaa
29-11-2012, 22:04
Grazie mille :)