Quali sono le differenze fondamentali tra C e C ++? [chiuso]

37

Molti tendono a scrivere "C / C ++", come se fossero la stessa cosa. Sebbene condividano molte somiglianze, non sono chiaramente uguali.

Ma quali sono le differenze fondamentali tra C e C ++? C ++ è una versione avanzata di C, o ci sono funzionalità in C che non esistono in C ++?

    
posta gablin 02.11.2010 - 23:03
fonte

5 risposte

40

I seguenti punti si riferiscono a C ++:

  1. (definito dall'utente) del sistema di tipi statici: consente di eseguire controlli statici sui dati e sul loro utilizzo - indica molti errori facilmente risolti in C
  2. multi- "paradigma": consente di lavorare come in C, con paradigmi orientati agli oggetti, con paradigmi generici ecc.
  3. Costruttore / Distruttore: l'unico modo per dire una volta cosa fare quando si crea o distrugge qualcosa e assicurarsi che l'utente non debba trovare la funzione corretta e usarla come in C
  4. RAII (nome errato): non devi gestire sempre la memoria. Mantieni le cose in portata e usa puntatori intelligenti che descrivono la durata degli oggetti. Ancora puoi utilizzare i puntatori grezzi.
  5. Modelli: meglio della macro, un vero linguaggio per manipolare e generare tipi prima della compilazione finale. Manca solo un sistema di tipi (vedi Concetti nei futuri standard C ++).
  6. Sovraccarico dell'operatore: consente di descrivere le operazioni in modo semplice sintattico e persino di definire linguaggi specifici del dominio incorporati all'interno del codice C ++.
  7. Nomi rilevati: spazi dei nomi, classi / struct, funzioni, ecc. hanno regole semplici per assicurarsi che i nomi non entrino in conflitto.
  8. Sistema di eccezioni: un modo per propagare errori che è spesso migliore del codice di ritorno. In effetti, il codice di ritorno è utile per errori logici specifici del dominio, poiché l'applicazione deve gestirlo. Le eccezioni sono usate per errori "hard", cose che rendono il codice seguente solo errato. Permette di rilevare gli errori più in alto nello stack delle chiamate, se possibile, reagire a tale eccezione (registrando o correggendo lo stato) e con RAII, se ben utilizzato, non rende l'intero programma sbagliato - se fatto bene, di nuovo.
  9. La libreria standard: C ha il suo, ma è tutto "dinamico". La libreria standard C ++ è quasi (non IO stream) composta da modelli (contenitori e algoritmi) che consente di generare codice solo per ciò che si usa. Meglio: dato che il compilatore deve generare codice, conoscerà molto il contesto e applicherà molte ottimizzazioni senza dover richiedere al codificatore di offuscare il suo codice - grazie a modelli e altre cose.
  10. cost-correct: il modo migliore per assicurarti di non modificare le variabili che non dovresti. Permette di specificare l'accesso in sola lettura a oggetti varaibili. E viene controllato solo al momento della compilazione, quindi non ci sono costi di runtime.
risposta data 03.11.2010 - 11:25
fonte
30

C ++ è stato inventato per gestire la complessità che C non poteva gestire. Ad esempio, un problema comune con C è che potresti "esaurire i nomi per variabili" (non per essere preso alla lettera, ovviamente) perché non c'erano incapsulamenti, spazi dei nomi ecc.

Inoltre, C non ha eccezioni, quindi la gestione degli errori è molto soggetta ad errori, poiché dipende dalla libreria controllare sempre i valori restituiti da funcs, mentre con le eccezioni, lo sviluppatore della libreria lancia semplicemente un'eccezione che garantisce che il flusso del programma essere fermato.

C ++ aiuta ad avere gli oggetti init del costruttore che vengono automaticamente chiamati dal compilatore. A differenza delle strutture C che devono essere inizializzate dal programmatore (quindi un'altra area soggetta a errori).

Infine, vi sono molti altri vantaggi propagandati da OOP, come il riutilizzo degli oggetti e i concetti generici di programmazione, come i modelli e i generici che consentono di riutilizzare il codice sorgente, ecc.

E molte altre cose che richiederebbero troppo del mio tempo per elencarle qui.

    
risposta data 02.11.2010 - 23:20
fonte
15

In generale, tutto ciò che esiste in C è supportato in C ++. Ovviamente il contrario è assolutamente falso.

Semplicemente parlando, il C ++ è orientato agli oggetti (quindi, per gli esempi, hai classi), C non lo è.

C ++ non ha un tipo booleano C89.

Sono lingue diverse. Condividono solo la maggior parte della sintassi.

    
risposta data 02.11.2010 - 23:07
fonte
8

C99 ha alcune caratteristiche che non esistono (almeno nella stessa forma) in C ++ (ad es. membri di array flessibili, array di lunghezza variabile, ecc.)

C99 ha anche aggiunto molto alla libreria che non è presente nello standard C ++ 98/03; la maggior parte di questo è stata aggiunta a C ++ 11 però.

In termini di orientamento di base, C fondamentalmente supporta la programmazione procedurale strutturata. Il C ++ supporta sia la programmazione orientata agli oggetti, la programmazione generica e la metaprogrammazione (eseguendo calcoli arbitrari in fase di compilazione). Con C ++ 11, aggiunge alcuni bit e pezzi che potrebbero almeno essere scambiati per il supporto alla programmazione funzionale (ad es. Espressioni lambda). Il C ++ 14 ne ha aggiunti altri, ma la maggior parte di essi sono davvero più utili piuttosto che qualsiasi tipo di importante cambiamento di orientamento.

    
risposta data 02.11.2010 - 23:23
fonte
1

Personalmente, penso che i template siano la caratteristica più significativa che C ++ aggiunge a C.

    
risposta data 03.11.2010 - 09:04
fonte

Leggi altre domande sui tag