[C con Clase] clases en C.

Davidson, Steven srd4121 en njit.edu
Jue Ene 24 01:53:56 CET 2013


Hola Diego,

2013/1/23 Diego Alvarez <dalvarez en wi-mobile.com>

>  Buenos dias..
>
>
> [CORTE]

> --------Triangulo.c-----------
>
> static TRIANGULO _triangulo = {1,2,1,Triangulo};
>
> void Triangulo(void)
>
> {
>
> _triangulo.cat_opuesto = 0;
>
> _triangulo.cat_adyacente = 0;
>
> _triangulo.hipotenusa = 0;
>
> }
>
> ------------------------------
>
> Asi tengo lo mas parecido a una clase.
>
> el problema radica que dentro del "Metodo" no puedo usar los "Atributos".
>
> La idea es que no tenga que mantener una "Instancia" activa todo el tiempo
> que la aplicacion este en funcionamiento ya que tengo limitaciones de
> hardware.
>
> En el .c tengo obligatoriamente que hacer la definición de "mini la clase"
> y tendria que mantenerla "Viva", en toda la aplicación.
>
> Sé que es algo poco convencional pero si alguien sabe como lo puedo usar
> algo muy parecido a usar objetos les inmenzamente agradecido.
>

El problema es que no has definido la función del constructor
correctamente. En C++, escribimos esto:

class Triangulo
{
  Triangulo();
  ...
};

Y luego,

Triangulo :: Triangulo()
{
  ...
}

Sin embargo, internamente, la función acaba siendo la siguiente:

Triangulo( Triangulo * );

Antes de existir C++ como lenguaje, Bjarne Stroustrup diseñó "C con
clases". Todas las "funciones miembro" eran funciones que aceptaban un
puntero al objeto de tal clase como su primer parámetro. A este puntero lo
nombró 'this'; he aquí la razón del puntero 'this' en C++.

Por lo tanto, tu conversión a C es simplemente volver a un diseño de
programación modular o estructurada; esto es,

struct _Triangulo;
typedef struct _Triangulo (*PTRN_Triangulo)( struct _Triangulo * );

typedef struct _Triangulo
{
  ...
  PTRN_Triangulo pfTriangulo;
} Triangulo;

Triangulo ctor_Triangulo( Triangulo *this );

Al igual que con las demás funciones "miembro".


Espero que esto te oriente.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130123/c6b71dac/attachment.html>


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