[C con Clase] diferencia sobre .h y cpp

Steven Davidson steven en conclase.net
Vie Feb 9 19:08:38 CET 2007


Hola Luis,

El pasado 2007-02-09 02:26:57, Luis escribió:

L> hola a todos, una consulta vi en una consulta esto:
L> Bueno. Depende de la implementación que quieras hacer con la estructura. Esto tendría sentido si la estructura contiene funciones. Si es así, entonces la implementación de las funciones se escriben en el ".cpp", mientras que la estructura se pone en el ".h". Por ejemplo,
L> 1. Mi pregunta es cual es la diferencia de un file y otro y las ventajas de separarlos o cual es la finalidad, por favor una explicación practica que no se como interpretarlo

Como ha mencionado Tomás, se suele hacer la separación entre la declaración y la implementación (o definición) por motivos de organización. Esto puede ser debido tanto por la cantidad de programadores trabajando en el mismo proyecto como para un solo programador con una gran cantidad de funciones y muchas líneas de código.

Aparte de los motivos anteriores, existen otras dos razones que pueden ser cruciales. Primeramente, las funciones pueden existir en otra biblioteca o en otro fichero fuente. Si definimos las funciones en el mismo fichero fuente del programa principal, el compilador no nos dará problemas, pero el enlazador (linker, en inglés) sí. Esto es porque el enlazador ve que existen dos referencias a la misma función: una en la biblioteca y otra en la redefinición. Como existe una ambigüedad que no puede resolver automáticamente, el enlazador lanza un error.

Volvamos al ejemplo que mencioné anteriormente con el proyecto abordado por varios programadores. Imagínate que los otros programadores tienen funciones iguales que las tuyas o incluso deben usar funciones que tú mismo has creado. Tu compañero no podría redefinir tu función en su código fuente, porque entonces estamos ante el problema descrito anteriormente: el enlazador se quejará por existir ambigüedades.

Otra razón de separar las implementaciones en varios ficheros fuentes es a la hora de compilar proyectos de grandes envergaduras. Si tienes que hacer cambios a unas cuantas funciones, entonces tendrás que recompilar. Sin embargo, es diferente el tiempo requerido  para recompilar un solo fichero fuente de 200.000 líneas de código (por ejemplo) que un fichero de 300 líneas de código. Los otros ficheros fuentes del proyecto no serán "tocados" al recompilar. Creéme que con programas de muchísimas líneas de código uno puede estar esperando media hora o más para que compile.

L> 2. estoy prensando hacer un Sistema de PDV (Punto de venta)- es que estoy leyendo un libro muy interesante se llama: UML y PATRONES y tiene conceptos de A/DOO y como sabran hablan de capas y POO, bueno y yo vi una vez sun amigo que programaba en Java en IDE muy bonito separado sus formularios(Diseño),  Clases(Implementación ), Base de Datos, lo tenia separado todo y ademas recuerdo que me decia que lo unia por medio de UML, bueno al margen de eso queria saber si se podría hacer algo similar con C++ o por lo menos modular y separar los formularios con la implementación clase.(vi los demos de  

Ten cuidado con algunos de estos términos. UML no es un lenguaje de programación, sino más de diseño. La verdad es que ni siquiera es un lenguaje como tal, sino una notación para asistir en el diseño.

En cuanto a programar modularmente, C++ sí permite este tipo de enfoque al igual que la POO.

> http://c.conclase.net/fuentes.php?tema=7) y no me funciona no me aparece nada, bueno espero no aburrirlos y me gustaria ampliar mis conocimientos gracias de antemano.
L> a y una consulta a mi mail me llega esta direción
L> cconclase en listas.conclase.net
L> y bueno steven en conclase.net o quien responda
L> se puede responder a  cualquiera de estas o tengo que hacerlo por esta interfax necesariamente.

Puedes responder a cualesquier mensajes enviados a la lista. En general, los mensajes no son dirigidos a ningún socio en particular, y por tanto cualquiera puede contestar.


Espero que lo anterior te ayude.

Steven


Más información sobre la lista de distribución Cconclase