En C++, ¿por qué es privado la visibilidad predeterminada para los miembros de las clases, pero pública para las estructuras?visibilidad predeterminada de los miembros de clase/estructura de C++
Respuesta
C++ se introdujo como un superconjunto de C. Structs se trasladaron desde C, donde la semántica de sus miembros era la de público. Existe una gran cantidad de código C, incluidas las bibliotecas que se desea trabajar con C++ también, que utilizan estructuras. Las clases se introdujeron en C++, y para ajustarse a la filosofía de encapsulación OO, sus miembros son privados por defecto.
Probablemente por compatibilidad con versiones anteriores con estructuras C. De esta forma, las estructuras declaradas en código C continuarán funcionando de la misma manera cuando se utilicen en el código C++.
Porque una clase es una forma habitual de hacer orientación a objetos, lo que significa que las variables miembro deben ser privadas y tener acceso público: esto es bueno para crear low coupling. Las estructuras, por otro lado, tienen que ser compatibles con las estructuras C, que son siempre públicas (no hay ninguna noción de público y privado en C), y no usan accesadores/mutadores.
- 1. Visibilidad predeterminada para clases C# y miembros (campos, métodos, etc.)?
- 2. ¿Visibilidad de miembros de la clase?
- 3. Visibilidad predeterminada de los métodos de clase en PHP
- 4. C++ herencia: la determinación del alcance y la visibilidad de los miembros
- 5. ¿Los miembros de una estructura de C++ están inicializados en 0 de forma predeterminada?
- 6. ¿Debo usar visibilidad interna o pública de forma predeterminada?
- 7. Definición de los miembros estáticos en C++
- 8. Controlando la visibilidad de los valores enum
- 9. Visibilidad de clase COM: C# a VB6
- 10. ¿Se prefieren los inicializadores vacíos para la inicialización predeterminada de miembros integrales?
- 11. Inicialización explícita de los miembros struct/class
- 12. C# Resolución de alcance predeterminada
- 13. Uso de los miembros de referencia rvalue?
- 14. Recolección de basura de los miembros estáticos
- 15. Visibilidad en subpaquetes
- 16. ¿Debo usar miembros de datos estáticos? (C++)
- 17. ¿Cómo demostrar los problemas de visibilidad de multihilo de Java?
- 18. Visibilidad de la plantilla de especialización de la función C++
- 19. Los conflictos entre los nombres de los miembros y los nombres de los argumentos de constructor
- 20. C++ Punteros a funciones de miembros Herencia
- 21. Herencia de miembros estáticos en C#
- 22. ¿Cómo alinear los nombres de los miembros de la clase C++ en una columna en emacs?
- 23. Eliminación de los miembros que implementan IDisposable
- 24. ¿Los miembros de la clase ocupan memoria?
- 25. Acceso a los miembros privados de PowerShell
- 26. variables C++ miembros
- 27. variables de miembros mutables estáticas en C++?
- 28. ¿Miembros genéricos de la clase en C#?
- 29. C++ miembros plantilla estática emisión de inicialización
- 30. C++: ¿optimización del orden variable de miembros?
Bueno, para ser justos, no es estrictamente necesario que la encapsulación sea para todos los miembros privados. Con C++ en línea, los métodos de acceso pueden ser muy baratos, pero en muchos lenguajes de programación orientada a objetos dada la sobrecarga de una llamada a función, las personas tienden a utilizar el acceso público ya que es más barato. Para un control más fino, uno puede usar declaraciones de propiedades si su idioma lo admite. Sin embargo, en el código nativo, el seguimiento de los cambios de las variables es más difícil que los idiomas administrados, por lo que tiene sentido establecer los atributos a través de un único punto en el código. – progician