PDA

View Full Version : [C] Funzioni Membro


bobby1112
12-01-2010, 11:24
salve ragazzi sono nuovo di c e volevo sapere per esempio in c++

class Sfera {


public :

float originX;
float originY;
float originZ;
float size;


int Sfera::impostaCoord()
{
float x = ((float)((rand() % 400) - 200) * 0.1f);
float z = (float)((rand() % 400) - 200) * 0.1f;
originX=x;originY=0;originZ=z;
return 0;
}
void Sfera::disegnaSfera()
{
//glTranslatef(originX,originY,originZ);
//glutSolidSphere(0.1,13,26);

}

};

come faccio a dichiarare le funzioni membro impostaCoord e disegnaSfera in una struct in c
Grazie

bobby1112
12-01-2010, 11:37
sto svolgendo esercizi con le librerie openGL e devo programmare in C

tomminno
12-01-2010, 12:53
sto svolgendo esercizi con le librerie openGL e devo programmare in C

Forse allora non ti conviene tradurre letteralmente un esempio in C++.
E poi nessuno (tranne qualche professore) ti impedisce di usare OpenGL con il C++.

Secondo me non ha molto senso complicarsi la vista con puntatori a funzione dentro una struct.

Avrai le funzioni:
int impostaCoord(Sfera * sfera);
void disegnaSfera(Sfera * sfera);

fero86
12-01-2010, 12:56
sto svolgendo esercizi con le librerie openGL e devo programmare in C no, non devi usare C per poter usare OpenGL. pensa che io OpenGL lo uso pure da Java:
http://playbay.altervista.org/Volley

asd :asd:

ed inoltre il gruppo Khronos sta sviluppando una specifica per dei binding OpenGL per JavaScript, si chiama WebGL :)

fero86
12-01-2010, 12:59
int impostaCoord(Sfera * sfera);
void disegnaSfera(Sfera * sfera); nella programmazione orientata agli oggetti le funzioni che hanno un parametro di tipo classe si trasformano immediatamente in metodi di quella classe (e senza quel parametro).

tomminno
12-01-2010, 13:36
nella programmazione orientata agli oggetti le funzioni che hanno un parametro di tipo classe si trasformano immediatamente in metodi di quella classe (e senza quel parametro).

:confused:
Io mi riferivo al porting inverso, da C++ a C, come richiesto.
Ovviamente nel mio caso Sfera è una struct e non più una classe.

bobby1112
12-01-2010, 14:04
quindi in c devo dichiarare queste funzioni ma dentro o fuori la struct?
int impostaCoord(Sfera * sfera);
void disegnaSfera(Sfera * sfera);
ps devo programmare per forza in c:confused:
Grazie

tomminno
12-01-2010, 14:11
quindi in c devo dichiarare queste funzioni ma dentro o fuori la struct?


fuori

banryu79
12-01-2010, 14:16
quindi in c devo dichiarare queste funzioni ma dentro o fuori la struct?

Nel linguaggio C, una struct (http://en.wikipedia.org/wiki/Struct_%28C_programming_language%29) è un costrutto che permette di definire tipi di dato "strutturati" tramite l'aggregazione di un insieme di campi di qualsiasi tipo.

Le funzioni in C non sono un tipo di dato (anche se tecnicamente, credo, hanno un tipo, espresso dalla loro 'firma') percui non puoi "inserire" delle funzioni in una struct [altro link utile (http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/SYNTAX/struct.html)], al massimo puoi inserire puntatori a funzione.

In linea di massima per rappresentare una classe C++ potresti definire una struct che contenga i campi che la classe definisce, e poi tradurre le funzioni della classe C++ con funzioni C che, come primo parametro, prendono un puntatore alla struct: questo sarebbe l'equivalente del puntatore "this" nella controparte C++.

Esempio: se hai una classe C++ Pippo che definisce 3 campi e 4 funzioni, la puoi tradurre creando un header file Pippo.h che contiene la definizione della struct "Pippo" che definisce i 3 campi, e le dichiarazioni di ognuna delle 4 funzioni che come primo parametro prenderanno un puntatore alla tua struct Pippo.
Poi crei Pippo.c che contiene la definizione delle 4 funzioni.
All'interno di ogni funzione potrai operare sui campi della struct tramite il puntatore passato come primo parametro alla funzione stessa.


@EDIT: è chiaro che la difficoltà sogettiva che esperirai nel fare quello che devi fare dipende principalmente da due aspetti: la tua conoscenza dei due linguaggi coinvolti e la complessità interna delle classi C++ coinvolte, da tradurre.
Se sul fronte C++ ti senti abbastanza tranquillo e invece ti preoccupa il fronte C, assicurati di conoscere/ripassare alcuni concetti che potrebbero servirti per completare il quadro: tipi primitivi in C, funzioni, puntatori, puntatori a funzione, struct.

bobby1112
12-01-2010, 14:30
grazie

banryu79
12-01-2010, 14:31
grazie
Aspetta a ringraziarmi, non so se hai notato quel "in linea di massima" :D, prego comunque.