Det du prøver på er det ikke bare at refferer fra en variabel fra main funktionen og til din areal funktion? Altså noget i stil med,
#include <iostream>
#include <cmath>
#define PI 3.14159
using namespace std;
void areal(float &r)
{
float r_tmp;
r_tmp = PI*pow(r,2);
r = r_tmp;
}
int main()
{
float radius = 3;
areal(radius);
cout << radius<<endl;
}
Det er rigtigt at det er godt at have dine funktions deklerationer i andre filer, som du også gør med din header fil. I følgende eksempel kunne du også have gjort noget ala
nclude <iostream>
#include <cmath>
#define PI 3.14159
using namespace std;
void areal(float &);
int main()
{
float radius = 3;
areal(radius);
cout << radius<<endl;
}
void areal(float &r)
{
float r_tmp;
r_tmp = PI*pow(r,2);
r = r_tmp;
}
Koden her er dog ikke særlig gennemsigtig da variablen radius faktisk indholder arealet.
En lidt anden måde ville måske være:
#include <iostream>
#include <cmath>
#define PI 3.14159
using namespace std;
void areal(float &,float &);
int main()
{
float radius = 3;
float _areal = 0;
areal(radius,_areal);
cout << _areal<<endl;
}
void areal(float &r, float &_areal)
{
_areal = PI*pow(r,2);
}
Men man skal passe meget på med refferencerne, da funktionen areal nu ændre på main scoopets variabel, det vil sige, at der ikke bliver lavet nogen kopi, da det er refferencer vi har med at gøre. Dette er farligt. Derfor er det bedst, i mine øjne, i denne situation, helt at lade være med at lave refferencer.
En god måde at bruge refferencer, eller pointere for den sags skyld, er at man sparer en masse plads, da argumentet netop er en refference til et noget plads. En anden god måde er at man slipper for deconstructor kaldene, hvis det er objekter man har med at gøre.
Indlæg senest redigeret d. 25.01.2008 23:20 af Bruger #1151