2009-04-27 46 views
18

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++?

+2

Duplicado: http://stackoverflow.com/questions/308581/how-should-i-order-the-members-of-ac-class –

+1

También: http://stackoverflow.com/questions/778281/why -put-private-fields-and-methods-at-the-top-of-class –

Respuesta

27

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.

+2

+1: el archivo de encabezado debe actuar como un contrato para los usuarios de la clase. Ninguna implementación pertenece allí. – kgiannakakis

+3

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

+0

@rlbond - buen punto. –

2

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

2

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.

5

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.

20

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.

0

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:

};

Cuestiones relacionadas