# 14.4. Accessor functions¶

By convention, accessor functions have names that begin with `get`

and
end with the name of the instance variable they fetch. The return type,
naturally, is the type of the corresponding instance variable.

In this case, the accessor functions give us an opportunity to make sure
that the value of the variable is valid before we return it. Here’s what
`getReal`

looks like:

```
double Complex::getReal ()
{
if (cartesian == false) calculateCartesian ();
return real;
}
```

If the `cartesian`

flag is true then `real`

contains valid data, and
we can just return it. Otherwise, we have to call `calculateCartesian`

to convert from polar coordinates to Cartesian coordinates:

```
void Complex::calculateCartesian ()
{
real = mag * cos (theta);
imag = mag * sin (theta);
cartesian = true;
}
```

Assuming that the polar coordinates are valid, we can calculate the
Cartesian coordinates using the formulas from the previous section. Then
we set the `cartesian`

flag, indicating that `real`

and `imag`

now
contain valid data.

As an exercise, write a corresponding function called `calculatePolar`

and then write `getMag`

and `getTheta`

. One unusual thing about
these accessor functions is that they are not `const`

, because
invoking them might modify the instance variables.

Take a look at the active code below, which uses the `getReal`

accessor function.

Write your implementation of `calculatePolar`

in the commented area of the active
code below. Once you’re done with that, write the `getMag`

and `getTheta`

accessor functions. Read the comments in `main`

to see how we’ll test if your
functions works. If you get stuck, you can reveal the extra problem at the end for help.

Let’s write the code for the `calculatePolar`

function.
Follow the format of the function `calculateCartesian`

.

Let’s write the code for the `getMag`

function,
which should return the magnitude of a `Complex`

object.

Let’s write the code for the `getTheta`

function,
which should return the magnitude of a `Complex`

object.