CS 14 - Lab


CS 14 Homepage

First Task - Lab Practical

Complete the lab practical as assigned by the TAs (your TA will give you the URL because there is no link to the practical). You will have 1 hour and 50 minutes to complete the practical. You will turn in your lab using the electronic turnin. WATCH THE TIME! The electronic turnin will be gone 1 hour and 50 minutes after the scheduled start time of your lab section and ASBOLUTELY NO LATE LAB PRACTICALS WILL BE ACCEPTED NO MATTER WHAT THE REASON EVEN IF YOU ARE ONLY 1 SECOND LATE. DO NOT TRUST THE CLOCK ON YOUR COMPUTER!!! IT IS NOT THE SAME AS THE CLOCK ON THE TURNIN SERVER. MAKE SURE YOU OPEN A TURNIN PAGE AND REFRESH IT IF YOU WOULD LIKE TO KNOW THE CURRENT TIME. REMEMBER THAT LAB PRACTICALS ARE 8% OF YOUR GRADE. DO NOT PUSH THE TURNIN TIME BECAUSE IF YOU MISS THE TURNIN, YOU ARE OUT OF LUCK..

You may not use ANY reference material at all and, should I even need to specify that this includes web, IM, chat, email, book, previous code written by you, code written by anyone, etc. You may not look at ANY reference while doing this lab practical. You may only look at this web page containing the lab practical, electronic turnin, and your code that you are currently writing for the practical.

Second Task - Mid-Quarter Evaluations

Please fill out an anonymous review of the course. The link is available here. Please make sure you select cs14 in the "select course" drop down box. We would like you to answer the following questions, so that we can put on a better course for you:
  1. Comments for/about the instructor (Ann Gordon-Ross)
  2. Comments for/about your TA. Please include your TAs name in your response.
  3. Do you attend the AEW workshop with Jimmy? If you do, give comments about the workship and Jimmy.
  4. Comments about the in-lab exercises
  5. Comments about the programming assignments
  6. Comments about the quizzes
  7. Comments about the lecture homeworks
  8. Comments about the in-class exercises
  9. When did you take CS 12 / attempt CS 14 before? If you took CS 12 at another school, tell us what programming language and development platform was used, and whether it was difficult to make the transition.
  10. What grade are you hoping to earn in this course? (Please be honest, it is perfectly alright to not expect to get an A in every course which is why a D- is a passing grade)
When you are done, show your TA the "Thank you page" and you'll be marked down for 1 point. The evaluation must be completed during lab time.

Third Task - Class Inheritance, Operator Overloading, and Virtual Functions

For this lab you will be working alone. There is a lot to do during this lab section and if you do not finish during lab time, you may finish outside of lab. The lab is due 24 hours after your lab section ends. However, try to finish during your scheduled lab time and demo your program during lab.

In this lab you will get some programming experience with class inheritance, operator overloading, and virtual functions. You will start with 3 seperate classes that together will define a cylinder and its location. The cylinder is made up of its height (Cylinder class), area of a 2D splice of the cylinder (Circle class), and xy point locations (Point class). You will have to make good judgements on what functions/variables should be public or private and what kind of inheritance to use. (Remember to use good encapsulation)

Class Inheritance

Write a class called Point. It will contain two data members of type double to hold the x and y coordinates of the point. It should also contain the following function members: Now write a class called Circle. It will inherit the class Point and have one double data member for the radius. Write the following member functions. Lastly, write a class called Cylinder. This class will inherit the class Circle. It will have a data member of type double to hold the height. It will also contain the following member functions.
You should now be able to pass tests 1 through 3 in main.cc.

Virtual functions

An Abstract Base Class is a class in which you never intend to declare an object of that type. It is solely used with inheritance to provide an appropriate base class from which classes may inherit interface or implementation. Abstract Base Classes typically do not contain data members. This is an example of an Abstract Base Class.

Shape.h has a couple of virtual functions. The first two are called getArea and getVolume and simply return zero. These functions will be used in the following way. The point class will inherit the Shape class, thus inheriting these functions. This is appropriate since the area and volume of a point are both zero. However, Circle inherits Point and provides its own getArea function which will overide the zero returning getArea function. However, the volume of a Circle is still zero. Cylinder inherits from Circle and redefines its own getArea and getVolume functions.

The virtual function printShapeInfo does not do anything in the Shape function and each function will overide this function to print the type of shape it is.

  • Add the shape class to your code. Make Point inherit the Shape class
  • Add a virtual function called printShapeInfo to the classes Point, Circle, and Cylinder that prints the type of object to the screen and the information stating the location of the object (note, do not include the printing of the area or volume in this function). Use your overloaded insertion operator. To do this you would have to dereference the this pointer.
  • Write a member function getArea in the class Cylinder that computes and returns the surface area of a cylinder. The formula is: 2 * circleArea + 2 * PI * radius * height
  • Check your code and verify for yourself how the virtual functions are working. You may use tests 4 and 5 in main.cc for testing your code.

    Sample Output

    Point Breakdown - In Lab Demo

    You may demo your program in lab or it will be graded from your electronic submission (due 24 hours after the end of your lab section). Please show the output from main.cc to the TA if you complete the lab. Remember, to receive credit for this lab, you MUST turn the code in online. If you do not turn in your code online, you will lose points for your lab. All code must be turned in online for archival purposes.

    Remeber to compile your code using the flags "-g -Wall -W -Werror -pedantic". You must have a makefile for this lab.