// @topic T00301 Introduction to classes
// @brief Employee class and main function in one file
// An example of Employee class and its public interface


// An enumeration is an easy way to create integer constants:
enum {
    SOUTH = 1,
    NORTH,       // 2
    WEST,        // 3
    EAST         // 4
};

class Employee {

    double salary;
    bool full_time_position;
    int employee_id;

public:
    ///////////////////////////////////////////////
    // operations that make up Employee interface:
    ///////////////////////////////////////////////
    void init( double sal, bool full_time, int id ) {
        salary = sal;
        full_time_position = full_time;
        employee_id = id;
    }
    void flip_status() {
        full_time_position = !full_time_position;
    }
    void double_salary() {
        //salary *= 2;
        salary = 2 * salary;
    }
};//class Employee definition ends here


int main()
{
    int x = 1; // single integer

    // array of integers:
    int arr[ 5 ] = { 10, 20, 30, 40, 50 };
    //               [0] [1] [2].[3].[4]
    arr[ WEST ] = arr[ SOUTH ]; // 40 <= 10

    // create an object
    Employee emp;

    // initialize object by calling its init() member function:
    emp.init( 25000.06, false, 10024 );

    // call another member function:
    //emp.salary = 2 * emp.salary;
    emp.double_salary();

    // create another object
    Employee emp2;
    emp2.init( 25000.06, true, 10025 );

    // create a third Employee object by manufacturing an exact copy of emp2
    Employee emp3 = emp2;

    // call some more member functions on Employee objects:
    emp.flip_status();
    emp2.flip_status();
    emp3.flip_status();
    return 0;
}