In C++, perché è privata la visibilità predefinita per i membri delle classi, ma pubblica per le strutture?visibilità predefinita dei membri della classe/struct C++
risposta
Il C++ è stato introdotto come superset di C. Le strutture sono state trasferite da C, dove la semantica dei membri era quella del pubblico. Esiste un sacco di codice C, incluse le librerie che si desideravano lavorare anche con C++, che usano le strutture. Le classi sono state introdotte in C++ e, per conformarsi alla filosofia OO di incapsulamento, i loro membri sono privati di default.
Probabilmente per retrocompatibilità con le strutture C. In questo modo le strutture dichiarate nel codice C continueranno a funzionare allo stesso modo quando usate nel codice C++.
Poiché una classe è un modo usuale di fare l'orientamento agli oggetti, il che significa che le variabili membro devono essere private e avere accessorie pubbliche - questo è utile per creare low coupling. Le strutture, d'altra parte, devono essere compatibili con le strutture C, che sono sempre pubbliche (non vi è alcuna nozione di pubblico e privato in C) e non usano accessor/mutators.
Bene, per essere onesti non è strettamente necessario che l'incapsulamento sia riservato a tutti i membri. Con l'inlining del C++, i metodi di accesso possono venire molto a buon mercato, ma in molte lingue OOP, dato il sovraccarico di una chiamata di funzione, le persone tendono ad usare l'accesso pubblico in quanto è più economico. Per un controllo più preciso, si possono usare le dichiarazioni di proprietà se il loro lang lo supporta. Tuttavia, nel codice nativo, il rilevamento delle modifiche alle variabili è più difficile rispetto ai linguaggi gestiti, quindi è opportuno impostare gli attributi attraverso un singolo punto nel codice. – progician