Hmm...No tutaj masz problem, bo nie rozumiesz do końca czym są struktury i klasy.
To zacznijmy od definicji - struktura, to twój własny, opisany typ danych. Posiada ona pola, określane przez typ zmiennych. Pozwala to na uporządkowanie wielu aspektów w kodzie. Klasa, jest w gruncie rzeczy tym samym - to także wyspecjalizowany typ danych, opisany przez programiste.
Każda struktura/klasa zajmuje w pamięci pewną ilość miejsca, zazwyczaj zależną od typu i ilości pól. Kiedy zwracasz strukturę, to zwracasz cały jej rozmiar w pamięci wraz ze wszystkimi polami.
Pan Pratha w owym kodzie na temat wektorów, jednak tych matematycznych/fizycznych stworzył dwojaką reprezentację danych - jedną według klasycznego wyglądu wektora matematycznego, drugą z opisem kąta oraz długością. Aby teraz przekonwertować jedną reprezentację na drugą, będziemy musieli znaleźć długości, bądź kąt oraz przeciwprostokątną.
W funkcji o którą pytasz, wyliczymy z twierdzenia pitagorasa długość przeciwprostokątnej na podstawie przyprostokątnych i zapiszemy ją do pola distance. Kąt możemy wyliczyć z funkcji arcus tangenes, bądź arcus cotangens i zapiszemy go do pola angle.
Oczywiście będziemy zwracać nasz typ danych, czyli całą strukturę. Tutaj mamy dwie opcje - napisać sobie wygodny konstruktor owej struktury, i zwrócić obiekt anonimowy, bądź stworzyć wewnątrz funkcji strukturę, wypełnić ją i zwrócić.
Np.
struct polar
{
double distance;
double angle;
polar( double x, double y ) //dla drugiej wersji zwracania wartosci
{
distance = x;
angle = y;
}
}
//1 wersja
polar rect_to_polar(rect const & r)
{
polar temp;
temp.distance = //tutaj odleglosc
temp.angle = //tutaj kat
return temp;
}
//2 wersja
polar rect_to_polar(rect const & r)
{
double t_distance = //tutaj odleglosc
double t_angle = //tutaj kat
return polar( t_distance, t_angle );
}
Myślę, że mogłem Ci coś rozjaśnić! :)