CS 202, Fall 2007 Assignment #6: 10 Points. Due Date: Thursday, 10/25/07. (3) 1. Implement the inheritance hierarchy based on the Shape class of Figure 12.3. It is not necessary to define any class members, constructors or destructors. Verify that that the entire class hierarchy compiles correctly without errors by declaring objects of the lowest level derived Shape classes in the main() program.** (3) 2. Use the String class in Figure 11.9 and the array sorting program of Figure 7.20 to write a program which alphabetizes an array of 10 String objects and prints them out in alphabetical order. Do not modify the String class and do not use any 'char *' or 'char []' declarations in your program. Declare the array in the following manner: String data[10] = { "Fairbanks", "Nenana", ... }; Use the names of 10 cities as data for testing your program.** (4) 3. Exercise 11.14(c). Implement multiplication of positive HugeInts by repeated addition. To compute P = M*N use the following method: HugeInt operator*(const HugeInt &N) const { HugeInt I, P; //initialized to 0 while (N>I) //addition loop { P = P + *this; I = I + 1; } return P; } You will also need to overload '>' in order to compare two HugeInts to control the while loop. Test your HugeInt multiplication function by computing and printing the factorials of the integers from 1 to 30 using the following driver program.** main() //compute factorials using HugeInts { HugeInt HugeNFactorial("1"), HugeN; for (int I=1; I<31; I++) { HugeN = HugeN + 1; HugeNFactorial = HugeNFactorial * HugeN; cout << HugeN << "! = " << HugeNFactorial << endl; } } What is the largest factorial that can be computed exactly using the HugeInt class? Why?** Extra Credit: What happens when you reverse the order of the multiplication in the factorial driver program? Why?** **For full credit, turn in fully commented program listings, including your name and the problem number, and the output from test runs exactly as produced by the program.