Così ora struct può avere funzione virtuale e il supporto eredità? Che differenza con le classi allora? Quello che il vero scopo delle informazioni nascondere? [duplicare]

StackOverflow https://stackoverflow.com/questions/3845564

Domanda

  

Eventuali duplicati:
   Quali sono le differenze tra struct e di classe in C ++

http://www.cplusplus.com/reference/std/typeinfo/ type_info /

Credo che il mio "maestro" non mi ha detto molto sulle differenze tra struct e le classi in C ++.

Ho letto in qualche altra domanda che per quanto riguarda l'eredità, struct sono pubbliche per impostazione predefinita ... anche io immagino struct non ha costruttori / distruttori ...

Quali sono le altre differenze, allora? Hanno importa più di tanto?

E quando si parla di / protette attributi / metodi privati, non sono accessibili in fase di esecuzione, solo perché il compilatore dice così al momento della compilazione e segnala un errore, giusto? Poi confrontando quelle caratteristiche con le classi, che cosa significa "information hiding" davvero portare al programmatore? E 'qui in modo che quando qualcuno riutilizzo della classe, questa persona non abusare della classe perché la roba privata / protetta sarà segnalato dal compilatore?

ho ancora lotta con il vero scopo di nascondere le informazioni, è ancora voglia di suono nella mia testa come porta più sicurezza nei programmi, che significa meno violazioni della sicurezza, ma sono davvero confuso circa l'obiettivo di tale progetto nella lingua ... (e io non intendo essere contro C ++ in alcun modo, ho solo capire in quali casi questa caratteristica può essere interessante o no, se non, questo non è un problema, ma mi piace sapere ... ).

È stato utile?

Soluzione

Per quanto riguarda il compilatore è interessato, non v'è alcuna differenza tra struct e class diverso da quello di default l'accessibilità. Sono solo due parole chiave diverse per definire la stessa cosa. Così, le strutture possono avere costruttori, distruttori, classi base, funzioni virtuali, tutto.

Per quanto riguarda i programmatori sono interessati, si tratta di una convenzione comune ad uso struct per le classi con nessuna di queste cose (in particolare, che sono POD ), o andare oltre e uso struct solo per le classi senza funzioni membro definite dall'utente affatto, solo i membri dati pubblici. La gente a volte pasticcio questa convenzione in su, perché è sorprendentemente facile pensare una classe è POD quando non lo è, ma almeno stanno cercando.

In C ++, almeno, informazioni nascondere assolutamente nulla a che fare con la sicurezza. Metti che a destra fuori di testa. Non fornisce alcuna protezione, tranne nello stesso modo generale, che ogni buon codifica la pratica rende il codice che è più facile ragionare su, e di conseguenza i programmatori a fare meno errori.

Lo scopo di nascondere informazioni è quello di permettere di cambiare l'implementazione più tardi, forse per rimuovere o rinominare soci privati, cassaforte nella conoscenza che nessuno degli utenti della vostra classe, al di fuori della classe stessa e gli amici, si riferisce a loro . Ovviamente è utile per fare esattamente questo, ma meno, ovviamente, e forse più importante, il suo utile perché rende esplicita nel codice ciò che l'interfaccia del classe è, che voler i clienti per l'uso, e che gli utenti della vostra classe può legittimamente aspettarsi di lavoro. È possibile ottenere la stessa cosa in linea di principio con la documentazione, ma in pratica è bello per il compilatore per far rispettare le regole.

E 'non è "sicuro", perché in un dato compilatore è possibile aggirare / Protezione pubblico e privato. Ma se gli utenti della vostra classe che fanno, stanno usando qualche trucco grottesco, che meritano per il loro codice di smettere di compilazione / di lavoro quando si cambia la classe, e se vengono a voi per lamentarsi si può ridere di loro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top