2009-08-07 27 views
5

¿hay un estándar en orden de funciones en el archivo cpp?orden de funciones en el archivo cpp


hay:

  • funciones globales
  • constructores
  • destructores
  • captadores
  • set
  • funciones algoritmic
  • si qt , Ranuras
  • si una clase derivada, funciones overrided
  • funciones estáticas
  • cualquier tipo de función que no puedo nombrar ...

en cpp, ¿hay alguna buena manera de ¿orden?

los pido como escribí en la lista anterior.

sé que no cambia nada, pero lo que me importa código de buen aspecto ...

¿cómo pedido?

Respuesta

2

Dentro de una clase, no hay una regla estricta por el idioma. Fuera de la clase, debe asegurarse de que una declaración preceda a una definición cuando los dos están separados.

En general, encontrará que el equipo con el que trabaja establecerá las reglas de formato con respecto a los archivos fuente. Esto es solo estética, sin embargo, ya que no tiene ningún efecto en la ejecución real del programa.

10

mi orden personal está dada por el orden dentro de la declaración de la clase:

class MyClass 
{ 
public: 
    MyClass(); 
    ~MyClass(); 

    void start(); 

protected: 
    static void init(MyClass *); 

private: 
    int m_iCounter; ///< counter variable for.... 
}; 

se vería así en .cpp:

MyClass::MyClass() : 
    m_iCounter(0) 
{ 
    ... 
} 

MyClass::~MyClass() { 
    ... 
} 

void MyClass::start() { 
    ... 
} 

void MyClass::init(MyClass *) { 
    ... 
} 

El orden se define como sigue:

  1. Constructores + Destructores
  2. (solo para el proyecto Qt s :) signals
  3. public métodos - ordenados por importancia, p. primero viene start() y stop(), a continuación, captadores y definidores
  4. métodos protegidos ordenados por importancia
  5. miembros protegidos
  6. métodos privados
  7. miembros privados

Esperamos que ayuda.

ciao, Chris

4

Esto puede parecer una tontería, pero trato de ordenar mis métodos públicos por "orden de uso 'normal'", por lo que los constructores son lo primero, métodos DoStuff continuación públicas, los métodos a continuación, cierre .. .la excepción a esta "regla" es el ~ destructor, que viene después del último constructor.

Última viene cualquier método privado de "ayuda".

Uso este mismo enfoque en todos los idiomas ... (C++, Java, C#, Perl, sh, o lo que sea) y nadie me ha rodado (todavía).

Saludos. Keith.

3

La manera en que yo estoy acostumbrado a pedido es de la plataforma Symbian donde el orden es:

  • , protegido, métodos privados públicas
  • , protegido, variables privadas públicas

El La razón de esto fue guiada por las reglas para extender las interfaces ya lanzadas para la compatibilidad con versiones anteriores. Como lo más probable es agregar una variable privada, se colocan al final de la clase, por lo que agregar una nueva no cambiará la ubicación de ninguna otra variable en la clase. Las cosas que cambian la interfaz vienen antes que esto en el orden 'público, protegido'. El orden se copia para los métodos de clase aunque estos no cambiarán la ubicación de la memoria de ninguna variable en una instancia de la clase.

Y no preguntar sobre las directrices para las funciones virtuales;)

2

De los más importantes para las más bajas:

  • variables privadas (no es broma, que revelan la mayor parte de los mecanismos internos de su la clase)
  • constructores
  • métodos públicos
  • métodos protegidos
  • Priv com métodos

Los métodos mismos deben ordenarse por su "nivel de abstracción": nivel superior: arriba, nivel inferior: hacia abajo, en otras palabras, estructure sus métodos para que solo invoquen los métodos a continuación.

1

Utilizo mi IDE para ir a las funciones en mi archivo cpp, y lo ordena alfabéticamente, o hago una búsqueda, y con la búsqueda mientras escribe, esto es muy rápido.

Así que para mí no hay absolutamente ninguna diferencia en el flujo de trabajo dependiendo del orden de las funciones en el archivo .cpp ...estándar

2

de Nuestra compañía es:

  1. constructores
  2. destructores
  3. métodos públicos (organizados alfabéticamente)
  4. methors privados (organizados alfabéticamente)
+0

No enlazo el alfabético. Si refactoriza el nombre, podría cambiar de posición. Primero, es otra cosa que debes recordar hacer. En segundo lugar, implica una diferencia más complicada en el control de la fuente para descubrir qué cambió. – Robert

+0

Es realmente raro para nosotros refactorizar nombres como los que sugiere. Principalmente porque tenemos que mantener la compatibilidad COM para la mayoría de nuestro código anterior (tenemos productos que se han enviado por más de 15 años). La mayor parte del código C++ se ha ido, reemplazado lentamente con C# y VB.NET. Entiendo que los últimos componentes se retirarán a principios del próximo año. Los estándares de codificación .NET son diferentes. – Tangurena

1

A veces es útil tener una algunas funciones auxiliares locales en un espacio de nombres sin nombre (también conocido como namespace anónimo) dentro del archivo CPP. Si es así, recomendaría tener esas funciones en la parte superior (dentro del archivo CPP), solo para estar seguro de que están definidas antes de cualquier otra función que las llame.

3

Esto es mucho menos importante ahora de lo que solía ser. Todos los IDEs decentes en estos días tienen (o deberían tener) la capacidad de ir a una definición o referencia con un clic derecho u otro gesto simple. La búsqueda a través del código es una pérdida de tiempo.

que normalmente les ordeno: Constructor Destructor Sea cual sea el fin implemento el resto

luego vuelvo y grupo de funcionalidad lógica/relacionados entre sí

Probablemente es más importante relacionado con un grupo cosas/fin cosas en un archivo de cabecera para la legibilidad de lo que está en un archivo cpp.

Cuestiones relacionadas