Sono consapevole della "coincidenza" tra struct e class in C++, con le classi che hanno membri privati per default e pubblici (o protetti) solo se specificato in modo esplicito, e strutture che seguono il principio inverso. L'idea che intendevo esporre era che se operi in C puoi usare solo le struct (con le caratteristiche limitate che hanno le struct in C), mentre se operi in C++ puoi permetterti di usare
anche le classi. Ovviamente, in C++ si potrebbe decidere di implementare strutture che comprendano creatore, distruttore, metodi e bla bla. Ad esempio...
#include <iostream>
#include <cmath>
using namespace std;
class Cerchio{
float r;
float a;
float c;
public:
Cerchio() { r=a=c=0.0f; }
Cerchio(float misura_raggio) { raggio(misura_raggio); }
void raggio( float misura_raggio ) {
r = misura_raggio;
a = ((float)M_PI)*r*r;
c = 2*((float)M_PI)*r;
}
float raggio() { return r; }
float area() { return a; }
float circonferenza() { return c; }
};
int main() {
Cerchio c(5);
cout<<c.area()<<endl;
cout<<c.circonferenza();
return 0;
}
... potrebbe essere anche scritto, in modo equivalente, come ...
#include <iostream>
#include <cmath>
using namespace std;
struct Cerchio{
Cerchio() { r=a=c=0.0f; }
Cerchio(float misura_raggio) { raggio(misura_raggio); }
void raggio( float misura_raggio ) {
r = misura_raggio;
a = ((float)M_PI)*r*r;
c = 2*((float)M_PI)*r;
}
float raggio() { return r; }
float area() { return a; }
float circonferenza() { return c; }
private:
float r;
float a;
float c;
};
int main() {
Cerchio c(5);
cout<<c.area()<<endl;
cout<<c.circonferenza();
return 0;
}
Qualunque soluzione si scelga (strutture del C, classi del C++, strutture del C++) a me sembra preferibile, nel cose specifico, rispetto alla creazione di un array dinamico da restituire a cura della funzione sulla quale ha chieso lumi Reynold. Piuttosto, se si volesse insistere con l'avere in restituzione un puntatore a un vettore di float (magari deve svolgere un esercizio e gli è stato imposto di fare proprio quello), mi parrebbe preferibile una funzione che riceva in input l'indirizzo di un buffer costituito da un vettore con la quantità necessaria di float e che restituisca l'indirizzo allo stesso buffer dopo averci inserito i dati richiesti.
float *cerchi( float raggio, buff_esiti *float );
Poi, per la carità... basta leggere cosa c'è in calce ad ogni mio messaggio. Sono un praticone che ha imparato da sè quel poco che sa e che "programma" per gioco e nulla più.