Wrap-Up

Answers to Self Review Exercises

10.1

a) member initializers. b) friend. c) new, pointer. d) initialized. e) static. f) this. g) const. h) default constructor. i) non-static. j) before. k) delete.

10.2

Error: The class definition for Example has two errors. The first occurs in function getIncrementedData. The function is declared const, but it modifies the object.

Correction: To correct the first error, remove the const keyword from the definition of getIncrementedData.

Error: The second error occurs in function getCount. This function is declared static, so it is not allowed to access any non-static member of the class.

Correction: To correct the second error, remove the output line from the getCount definition.

Exercises

10.3

Compare and contrast dynamic memory allocation and deallocation operators new, new [], delete and delete [].

10.4

Explain the notion of friendship in C++. Explain the negative aspects of friendship as described in the text.

10.5

Can a correct Time class definition include both of the following constructors? If not, explain why not.

Time( int h = 0, int m = 0, int s = 0 ); Time();

10.6

What happens when a return type, even void, is specified for a constructor or destructor?

10.7

Modify class Date in Fig. 10.10 to have the following capabilities:

  1. Output the date in multiple formats such as

    DDD YYYY MM/DD/YY June 14, 1992

  2. Use overloaded constructors to create Date objects initialized with dates of the formats in part (a).
  3. Create a Date constructor that reads the system date using the standard library functions of the header and sets the Date members. (See your compiler's reference documentation or www.cplusplus.com/ref/ctime/index.html for information on the functions in header .)

In Chapter 11, we will be able to create operators for testing the equality of two dates and for comparing dates to determine whether one date is prior to, or after, another.

10.8

Create a SavingsAccount class. Use a static data member annualInterestRate to store the annual interest rate for each of the savers. Each member of the class contains a private data member savingsBalance indicating the amount the saver currently has on deposit. Provide member function calculateMonthlyInterest that calculates the monthly interest by multiplying the balance by annualInterestRate divided by 12; this interest should be added to savingsBalance. Provide a static member function modifyInterestRate that sets the static annualInterestRate to a new value. Write a driver program to test class SavingsAccount. Instantiate two different objects of class SavingsAccount, saver1 and saver2, with balances of $2000.00 and $3000.00, respectively. Set the annualInterestRate to 3 percent. Then calculate the monthly interest and print the new balances for each of the savers. Then set the annualInterestRate to 4 percent, calculate the next month's interest and print the new balances for each of the savers.


10.9

Create class IntegerSet for which each object can hold integers in the range 0 through 100. A set is represented internally as an array of ones and zeros. Array element a[ i ] is 1 if integer i is in the set. Array element a[ j ] is 0 if integer j is not in the set. The default constructor initializes a set to the so-called "empty set," i.e., a set whose array representation contains all zeros.

Provide member functions for the common set operations. For example, provide a unionOfSets member function that creates a third set that is the set-theoretic union of two existing sets (i.e., an element of the third set's array is set to 1 if that element is 1 in either or both of the existing sets, and an element of the third set's array is set to 0 if that element is 0 in each of the existing sets).

Provide an intersectionOfSets member function which creates a third set which is the set-theoretic intersection of two existing sets (i.e., an element of the third set's array is set to 0 if that element is 0 in either or both of the existing sets, and an element of the third set's array is set to 1 if that element is 1 in each of the existing sets).

Provide an insertElement member function that inserts a new integer k into a set (by setting a[ k ] to 1). Provide a deleteElement member function that deletes integer m (by setting a[ m ] to 0).

Provide a printSet member function that prints a set as a list of numbers separated by spaces. Print only those elements that are present in the set (i.e., their position in the array has a value of 1). Print --- for an empty set.

Provide an isEqualTo member function that determines whether two sets are equal.

Provide an additional constructor that receives an array of integers and the size of that array and uses the array to initialize a set object.

Now write a driver program to test your IntegerSet class. Instantiate several IntegerSet objects. Test that all your member functions work properly.

10.10

It would be perfectly reasonable for the Time class of Figs. 10.1810.19 to represent the time internally as the number of seconds since midnight rather than the three integer values hour, minute and second. Clients could use the same public methods and get the same results. Modify the Time class of Fig. 10.18 to implement the time as the number of seconds since midnight and show that there is no visible change in functionality to the clients of the class. [Note: This exercise nicely demonstrates the virtues of implementation hiding.]

Категории