My program is erroring out when I try to add a second set of values to the Hourly class. When I switch to using hours[current_hourly].etc it works fine so I assume it is because of how I'm using pointer hour1. What is the proper way to use the pointer to add values to the properties? Thank you.
If you want to do polymorphism, then the base class has to have all the pure virtual function you want to call from the derived classes. You don't seem to have any Set* functions at all, anywhere.
The override keyword is good practise.
It's not a good idea to have protected member variables. Make them private and set them via the base class constructor. Call the base class constructor from the derived classes constructors.
Also prefer double rather than float.
Prefer std::vector rather than arrays.
You could have more functions - for example each case in the switch should call a function. As should displaying the menu.
In addition to what TheIdeasMan said if you have not caught it yet you are missing #include <string> at the top of your program.
After adding the setter and a getter function to the Employee class case 1 started to come together. At first "hours1" did not work so I tried "hours" and that worked.
It's not a good idea to have protected member variables. Make them private and set them via the base class constructor. Call the base class constructor from the derived classes constructors.
In addition to that none of your classes have a constructor which should set the private variables before it is used.
The pointer of type "Employee" being set to an address of an array of type "Hourly" does not make much sense.
I guess the OP is trying to do polymorphism there: pointer to derived is a valid pointer to base :+) What is missing is pushing those pointers into 1 container, not to have 3 separate arrays.
@OP
You could get away without any Set functions, do it with the constructors. Set functions are only necessary if the object is being changed after construction. There might not be a need for Get functions either, write a member function to print the data. Although programs are supposed to be more robust when such get interface functions are written. The idea is the interface remains the same, the function itself can be changed to cope with some internal representation change. For example if the employee status was changed to be a class of it's own.
But one should try to avoid blindly writing a get / set function every member variable - they might as well all be public!! Consider having Update functions that change the values for all the members of the class all at once.
Also consider what you public interface should be: What public functions should the user be able to use?