web-dev-qa-db-fra.com

visibilité par défaut des membres de classe / structure C ++

En C++, pourquoi privé est-il la visibilité par défaut pour les membres des classes, mais public pour les structures?

50
S I

C++ a été introduit comme un sur-ensemble de C. Les structures ont été transférées de C, où la sémantique de leurs membres était celle du public. Il existe un grand nombre de code C, y compris des bibliothèques que l'on souhaitait également utiliser avec C++, qui utilisent des structures. Les classes ont été introduites en C++, et pour se conformer à la philosophie OO d'encapsulation, leurs membres sont privés par défaut.

80
Oren Trutner

Parce qu'une classe est une manière habituelle de faire une orientation objet, ce qui signifie que les variables membres doivent être privées et avoir des accesseurs publics - c'est bon pour créer faible couplage . Les structures, en revanche, doivent être compatibles avec les structures C, qui sont toujours publiques (il n'y a pas de notion de public et privé en C), et n'utilisent pas d'accesseurs/mutateurs.

9
a_m0d

Probablement pour une compatibilité descendante avec les structures C. De cette façon, les structures déclarées dans le code C continueront de fonctionner de la même manière lorsqu'elles sont utilisées dans le code C++.

1
Karl Voigtland