[C con Clase] Programación modular.
Jorge Vega Sanchez
memmaker650 en gmail.com
Mie Mayo 19 10:10:11 CEST 2010
Vale perdón que igual no me he explicado suficiente.
A ver por ejemplo.
Quiero definir una clase, con sus parte publica y su parte privada por
ejemplo y variables y procedimientos en ambas secciones.
Variables globales que se definirán en el programa principal y se
usaran en los procedimientos.
Definirá las variables tipo clase en el programa principal y aparte de
sus procedimientos propios de la clase serán parámetros para
procedimientos/funciones del programa.
Tengo dificultades con la visibilidad de las variables en los
ficheros, la definición de las librerías y su visibilidad.
Pongo un ejemplo, es un poco estúpido pero creo que sirve:
Es posible que esta división se pueda mejorar, me gustaría que me
aconsejarais sobre la separación de código.
head.h --> hecha como cabecera de main.cpp
#include <iostream>
#include <stdio.h>
#include <string>
#include "../include/log.h"
class persona {
private:
// Datos miembro de la clase "pareja"
int telefono, DNI;
public:
// Funciones miembro de la clase "pareja"
string nombre[10], apellidos[30];
void Guarda(string name, string family_name)
{
nombre=name;
apellidos=family_name;
}
void datos_privados(int phone_numer, int id_card)
{
telefono=phone_number;
DNI=id_card;
}
void imprime(int a2, int b2)
{
cout << nombre <<endl;
}
};
main.cpp
#include "head.h"
#include "funciones.h"
using namespace std;
// Variable global
int num=0,,k,y,z;
string mensaje;
int main()
{
int valor=0;
persona maziu;
printf("Hola mundo\n");
num=++;;
//Guardamos los valores dentro en su sitios
maziu.Guarda("Alberto", "Bielsa Noveleta");
if(num==1)
{
control(maziu, num);
}
valor=modificacion1(valor);
if (valor==5)
{
printf("oK!!!! %d\n",valor);
}
maziu.imprime
exit(0);
}
funciones.h
int modificacion1(int valor);
int modificacion2(int val);
funciones.cpp
#include "funciones.h"
#include "head.h"
extern int num; //Definición de las variables globales.
int modificacion1(int val_or)
{
printf("Funciona el fichero de cabecera\n");
val_or=1;
if(val_or==1)
{
val_or=modificacion2(val_or);
}
num+=1;
return(val_or);
}
int modificacion2(int val)
{
printf("Segunda función %d\n", val);
val+=5;
if (num==2)
printf("Hola");
return(val);
}
control.h
#include <math.h>
//En control.cpp necesito usar la librería matematica
void control(persona x, int b);
bool condicion();
control.cpp
#include "control.h"
void control(persona x, int b)
{
int resul=0;
resul=pow(b,b);
if(num=2)
{
x.imprime();
}
}
bool condicion()
{
persona Roberto;
int sol=0;
sol=sqrt(pow(k,z));
if(sol<10)
{
log_escribir("Todo funciona bien"); // llamada a procedimeinto de la
librería externa 'log'.
return true;
}
else
{
return false;
}
}
FINAL
On 19/05/2010, at 9:04, Steven Davidson wrote:
> Hola Jorge,
>
> 2010/5/18 Jorge Vega Sanchez <memmaker650 en gmail.com>
> Buenas
>
> Llevo unos días trabajando con un programa que ya funciona y estoy
> probando a distribuirlo en varios ficheros porque veo el código muy
> desordenado. Quiero distribuir el código en varios ficheros para
> tenerlo más ordenado y que sea más fácil ampliar el código y que sea
> legible. El problema viene en que ando muy perdido en esto porque no
> encuentro documentación y estoy probando alguna cosa que he visto
> pero no cumple todo lo que quiero. Y no sé como enlazarlo todo.
>
> Mi programa tiene: variables globales, 4 procediemientos generales y
> 2 procedimientos de control y un programa principal.
>
> Me gustaría dividirlo en uno/dos ficheros de cabecera y 3 ficheros
> fuente. 1 donde este el main, otro donde esten los procedimientos de
> control y otro donde estén los procedimientos generales. En la
> cabecera incluyo una librería externa.
>
>
>
>
> Sin conocer los detalles ni el problema exacto, no podemos ser muy
> precisos en nuestra respuesta. Aparte de la ordenación del código,
> la separación del código en diferentes ficheros ofrece también una
> oportunidad para agrupar y relacionar el código lógicamente.
>
> A mi parecer, el mayor problema que puedas tener es con las
> variables globales. Defínelas en un fichero fuente, pero decláralas
> en los demás donde las vayas a usar. Esto implica que deberás usar
> 'extern' a la hora de declarar las variables globales que necesitas,
> pero sin (re)definirlas. Por ejemplo,
>
> // codigo01.h
>
> extern int g_num;
> extern float g_real;
>
>
> // codigo01.cpp
>
> int g_num = 10;
> float g_real = -.5009;
>
>
> // codigo02.h
>
> #include "codigo01.h"
>
> struct punto4d { double x,y,z,w; };
>
> extern punto4d g_origen;
>
>
> // codigo02.cpp
>
> punto4d g_origen = { 0.0, 0.0, 0.0, 1.0 };
>
>
> // main.cpp
>
> #include "codigo01.h"
> #include "codigo02.h"
>
> int main()
> {
> punto4d p;
>
> p.x = g_origen.x * g_num + g_real;
> p.y = g_origen.x * g_num + g_real;
> p.z = g_origen.x * g_num + g_real;
> p.w = g_origen.x;
> ...
> return 0;
> }
>
>
>
> Espero que esto te oriente.
>
> Steven
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100519/9be2ea6e/attachment.html>
Más información sobre la lista de distribución Cconclase