# Redefined Types

#### typedef

Example 1

```// Define a 'TReal' type to be a double
typedef double TReal;
```

Example 2

```// Define a type 'TIntArray' as an array of 10 integers
typedef  int TIntArray;
```

Example 3

```// Combine typedef with struct — common in windows and old C code
typedef struct SMyStruct {
int miInteger;
double mdDouble;
} TSomeType;
```

Example 4

```// Define a function pointer type for a function taking and returning an int
typedef int (*TFnPtr)(int);
```

Example 5

```// Define a type for an array of four pointers
typedef double* TPtrArray;
```

Example 6

```// Define a type for a pointer to a pointer
typedef int** TPtrPtr;
```

Example 7

```// Define a type for a member function pointer
typedef int CMyClass::*TMemberFnPtr(int);
```

Example 8

```// Define a class type as another type
typedef CMyClass TNewType;
```

#### enum

Video Tutorials

Example 1

```// Define an enumeration of months with the integers 0–11
enum EMonth {   keJanuary, keFebruary, keMarch, keApril, keMay, keJune,
keJuly, keAugust, keSeptember, keOctober, keNovember, keDecember };
```

Example 2

```// Define an enumeration of the first five prime numbers.
// Note that not defining the value, like three, means that
// the constant takes the value of the prior constant plus one.
enum EPrime {   keTwo = 2, keThree, keFive = 5, keSeven = keFive + 2, keNine = keSeven + 2 };
```

Example 3

```// Define an enumeration of the first five Fibonacci numbers
// Note that successive Fibonacci numbers are the of the last two
// Note also that F1 = F2 = 1 is a repeated value
enum EFibonacci { keF0 = 0, keF1 = 1, keF2 = keF0 + keF1, keF3 = keF1 + keF2, keF4 = keF2 + keF3 };
```

Example 4

```// Define an enumeration of flag bits
enum EBitFlag { keBit0 = 1, keBit1 = 2, keBit2 = 4, keBit3 = 8 };
```

Example 5

```// Define an enumeration of flag bits
enum EBitFlag { keBit0 = 1 << 0, keBit1 = 1 << 1, keBit2 = 1 << 2, keBit3 = 1 << 3 };
```

Example 6

```// Define an enumeration for directions:
// left = 0, right = 1, up = 4, down = 5
enum EDirection { keLeft = 0, keRight, keUp = 4, keDown };

// Declare and initialize
EDirection eMyDirection = keUp;

// Convert enum to an int value (automatic)
int iMyInt = eMyDirection;

// Convert int to enum
int iOne = 1;
eMyDirection = (EDirection)iOne;

// Conversion from an int might not always make sense
int iSix = 6;
eMyDirection = (EDirection) iSix;
```