En C++ a veces en la definición de clase, los miembros públicos se declaran al principio y los privados más tarde. Pero las variables o los miembros de los datos son normalmente privados y utilizados por los métodos públicos. Entonces, en este caso, las variables se usan pero aún no se han declarado. Por lo tanto, el código se vuelve difícil de entender. Pero encontré programadores, sitios o libros de renombre para declarar a los miembros privados más tarde. ¿Alguien sabe cuál es el motivo?¿Por qué definir miembros privados debajo de miembros públicos en C++?
Respuesta
Hago las cosas de esta manera ya que a los usuarios de mi clase no les importan los miembros privados, les interesa la API pública (es decir, cómo usar mi clase).
Además, en los archivos de cabecera generalmente solo estoy declarando funciones de miembros, en lugar de definirlas, por lo que no estoy accediendo a ningún miembro privado de todos modos.
+1: el archivo de encabezado debe actuar como un contrato para los usuarios de la clase. Ninguna implementación pertenece allí. – kgiannakakis
Excepto por, por supuesto, funciones en línea. Sin embargo, en todos los casos menos en los más triviales, esos deberían venir después de la definición de la clase. – rlbond
@rlbond - buen punto. –
Normalmente, los miembros privados no importan. Si estoy buscando en una clase para determinar cómo usarlo en otro lugar del código, no me importa que sea interno, así que coloque a los miembros privados en la parte inferior, ya que no necesito saber sobre ellos. Si I "m modificación de una clase, entonces voy a tomar el tiempo para encontrar a los miembros privados y sé que estarán en la parte inferior en lugar de tener que hojear toda la clase
Somos como opuestos:. My Question
Mi razonamiento es que cuando te familiarizas con una clase, es más beneficioso que primero te introduzcan en la interfaz pública y luego profundizar en los miembros privados cuando lo necesites. Si comienzas mirando a los miembros privados, no tienes contexto cómo se usan.
Los miembros privados y la implementación deben ocultarse en el archivo de encabezado. Poner las definiciones de miembros privados en la parte inferior es una manera rápida de hacerlo. tal vez sea mejor usar el Pimpl idiom y ocultar la parte privada de su clase en una estructura interna.
Leemos texto de arriba a abajo, por lo que la información más relevante debe estar en la parte superior. En una definición de clase, esa es la interfaz pública.
De acuerdo. Los miembros privados deben declararse en el fondo. La única buena razón para declarar miembros privados primero que encontré, es cuando una función necesita obtener o devolver un tipo de datos personalizado, como: vector. El compilador le preguntará qué tipo de datos es eso.
Pero incluso en ese caso yo prefiero que esté a hacer:
{ privada: /// advicing OFC theres más privados de abajo! anterior declarar simplemente del tipo
pública:
privada:
};
- 1. Heredando miembros privados en C++
- 2. Esconder datos privados miembros? (C++)
- 3. Miembros privados y protegidos: C++
- 4. Métodos que utilizan miembros privados o accesadores públicos
- 5. Accesodores contra miembros públicos
- 6. Accediendo a miembros privados
- 7. Serializar datos de miembros privados
- 8. ¿Cómo deben implementarse los miembros privados y públicos en Object-C?
- 9. Método para llamar a miembros o métodos públicos/privados. Buenas prácticas: C# .NET
- 10. ¿Miembros privados en la clase pimpl?
- 11. Declaración de variables de miembros privados
- 12. PHP: campos de miembros públicos inmutables
- 13. ¿Cómo ocultar miembros privados de una clase?
- 14. Acceso miembros privados de plugin de jQuery
- 15. Acceso a los miembros privados de PowerShell
- 16. C++ miembros privados de la clase base abstracta
- 17. Javadoc con Gradle: mostrar también miembros privados
- 18. ¿Cómo me ayudaría a definir `that = this` para crear variables/miembros privados?
- 19. Acceso a miembros de datos de plantilla heredados públicos
- 20. Definición de los miembros estáticos en C++
- 21. ¿Por qué el intellisense de Visual Studio muestra miembros y funciones privados?
- 22. ¿Por qué no se permite decltype en las variables de miembros privados?
- 23. ¿Por qué las funciones en línea pueden manipular variables de miembros privados?
- 24. ¿Cómo hacer que los miembros de struct sean privados?
- 25. ¿Los miembros privados son realmente más "seguros" en Java?
- 26. Miembros públicos e internos en una clase interna?
- 27. ¿Por qué la biblioteca de cierre de Google no usa miembros privados reales?
- 28. amigo con clase pero no puede acceder a miembros privados
- 29. DataContractSerializer: ¿por qué no eliminar miembros?
- 30. ¿Por qué usamos la interfaz sin miembros?
Duplicado: http://stackoverflow.com/questions/308581/how-should-i-order-the-members-of-ac-class –
También: http://stackoverflow.com/questions/778281/why -put-private-fields-and-methods-at-the-top-of-class –