[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