C/Visual C - Donde definir de constantes en C++???

 
Vista:

Donde definir de constantes en C++???

Publicado por Luis (3 intervenciones) el 02/10/2003 13:04:05
Quiero definir unas constantes, para una clase, en C++ (De estas que antes poniamos #define y ahora en C++ creo que se recomienda poner const, aunque a mi me gusa #define). Esas constantes sólo las va a utilizar esa clase. ¿Dónde es más correcto ponerlo en el .h o en el .cpp o es igual?

Gracias compañeros.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Donde definir de constantes en C++???

Publicado por Nicolas (183 intervenciones) el 02/10/2003 20:05:16
Yo creo (debido a mi poca experiencia) que te convendria hacerlo en el .cpp porque es una manera de encapsular lo que tenes. La idea es que nadie vea la manera en que implementas las cosas. Pero el hecho de que sea una constante, es algo que se podria hacer en cualquiera de los dos archivos, ya que no hace a mostrar informacion al usuario de mas, sino que es algo que no afecta el encapsulamiento.

Abrazo y espero que mi opinion te sirva de algo!!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Donde definir de constantes en C++???

Publicado por chuidiang (677 intervenciones) el 03/10/2003 09:33:20
Lo que cuenta Nicolas es cierto, es mejor encapsular las cosas y que nadie vea nada que no le sea necesario.

Hay además otro motivo para ponerlo en el .cpp :

Si la pones en el .h y por un casual necesitas cambiarle el valor a lo largo del proyecto, se recompilarán todos los .cpp que hagan include de ese .h (el .h ha cambiado y las utilidades de makefile o del Visual C++ o lo que estés usando lo detectarán y recompilarán los ficheros.)

Si pones la constante en el .cpp y la cambias, los demás ficheros .cpp no se verán "afectados" y el compilador no los recompilará. Sólo se recompilará ese .cpp concreto.

Esto es importante en proyectos grandes con muchos ficheros y, como norma general, debes poner todo lo que puedas en el .cpp mejor que en el .h (#define, constantes, typedef, etc). Por supuesto, siempre que no necesites esas cosas en otros ficheros .cpp.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Donde definir de constantes en C++???

Publicado por fernando.gomez (1603 intervenciones) el 07/10/2003 01:50:01
Concuerdo con ambos.
Chuidilang comenta: "Por supuesto, siempre que no necesites esas cosas en otros ficheros .cpp". Me gustaría extender esto.
Normalmente, hay un archivo CPP que se compila primero (en VC6, es AFXSTD.CPP, aunque lo puedes cambiar en las opciones de compilación). Si aquí declaras una variable, puedes emplear esta en otros ficheros CPP, siempre y cuando, en éstos, la declares como extern. Pongamos el siguiente ejemplo:
// Afxstd.cpp
long nRefCount;

// OtroArchivo.cpp
void ReferenceCount()
{
return nRefCount;
}

Esto te generará un error de compilación, ya que en OtroArchivo.cpp no está declarado nRefCount. Ahora, veamos esta variación del ejemplo anterior.

// Afxstd.cpp
long nRefCount ;

// OtroArchivo.cpp
long nRefCount;
void ReferenceCount()
{
return nRefCount;
}

Esta vez, no tendrás problemas de compilación, pero sí de enlazado (link), ya que te dirá que en OtroArchivo.cpp se redefinió nRefCount. Esto se soluciona con extern, como muestra el siguiente ejemplo.

// Afxstd.cpp
long nRefCount;

// OtroArchivo.cpp
extern long nRefCount;
void ReferenceCount()
{
return nRefCount;
}

Esto compilará y enlazará bien tu programa. Esto se dá, porque extern le dice al compilador: "tranquilo mi buen, te paso la variable a la hora de enlazar, no te preocupes al compilar".

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar