Exercise P8.1. Derive a class Programmer from Employee. Supply a constructor Programmer(string name, double salary) that calls the base-class constructor. Supply a function get_name that returns the name in the format “Hacker, Harry (Programmer)”.
Exercise P8.2. Implement a base class Person. Derive classes Student and Instructor from Person. A person has a name and a birthday. A student has a major, and an instructor has a salary. Write the class definitions, the constructors, and the member functions print() for all classes.
Exercise P8.3. Derive a class Manager from Employee. Add a data field, named department, of type string. Supply a function print that prints the manager’s name, department, and salary. Derive a class Executive from Manager. Supply a function print that prints the string Executive, followed by the information stored in the Manager base object.
Exercise P8.4. Implement a base class Account and derived classes Savings and Checking. In the base class, supply member functions deposit and withdraw. Provide a function daily_interest that computes and adds the daily interest. For calcula- tions, assume that every month has 30 days. Checking accounts yield interest of 3 percent monthly on balances over $1,000. Savings accounts yield interest of 6 per- cent on the entire balance. Write a driver program that makes a month’s worth of deposits and withdrawals and calculates the interest every day.
Exercise P8.5. Measure the speed difference between a statically bound call and a dynamically bound call. Use the Time class to measure the time spent in one loop of virtual function calls and another loop of regular function calls.
Exercise P8.6. Write a base class Worker and derived classes HourlyWorker and SalariedWorker. Every worker has a name and a salary rate. Write a virtual function compute_pay(int hours) that computes the weekly pay for every worker. An hourly worker gets paid the hourly wage for the actual number of hours worked, if hours is at most 40. If the hourly worker worked more than 40 hours, the excess is paid at time and a half. The salaried worker gets paid the hourly wage for 40 hours, no mat- ter what the actual number of hours is.
Exercise P8.7. Implement a base class Appointment and derived classes Onetime, Daily, Weekly, and Monthly. An appointment has a description (for example, “see the den- tist”) and a date and time. Write a virtual function occurs_on(int year, int month, int day) that checks whether the appointment occurs on that date. For example, for a monthly appointment, you must check whether the day of the month matches. Then fill a vector of Appointment* with a mixture of appointments. Have the user enter a date and print out all appointments that happen on that date.
Exercise P8.8. Improve the appointment book program of Exercise P8.7. Give the user the option to add new appointments. The user must specify the type of the appointment, the description, and the date and time.
Exercise P8.9. Improve the appointment book program of Exercises P8.7 and P8.8 by letting the user save the appointment data to a file and reload the data from a file. The saving part is straightforward: Make a virtual function save. Save out the type, description, date, and time. The loading part is not so easy. You must first determine the type of the appointment to be loaded, create an object of that type with its default constructor, and then call a virtual load function to load the remainder.
G Exercise P8.10. Implement a base class Vehicle and derived classes Car and Truck. A vehicle has a position on the screen. Write virtual functions draw that draw cars and trucks as follows:
Then populate a vector of Vehicle* pointers with a mixture of cars and trucks, and draw all of them.
G Exercise P8.11. Implement a base class Shape and derived classes Rectangle, Triangle, and Square. Derive Square from Rectangle. Supply virtual functions double area() and void plot(). Fill a vector of Shape* pointers with a mixture of the shapes, plot them all, and compute the total area.
G Exercise P8.12. Use Exercise P8.11 as the basis for a drawing program. Users can place various shapes onto the screen by first clicking on a shape icon and then click- ing on the desired screen location:
Hint: Supply virtual functions make_shape(Point p) that return a new shape of default size anchored at the point p.
G Exercise P8.13. Extend the program of Exercise P8.12 by adding another shape type: CircleShape. (You cannot call it Circle, because there already is a Circle class in the graphics library.) Explain what changes you needed to make in the program to implement this extension. How do virtual functions help in making the program easily extensible?
Exercise P8.14. Write a base class Chart that stores a vector of floating-point values. Implement derived classes, PieChart and BarChart, with a virtual plot function that can plot the data as a pie chart and as a bar chart.