CS 14 - Lab


CS 14 Homepage

Class Inheritance, Operator Overloading, and Virtual Functions

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 must demo all programs in lab. The TA will look at the output of each program and also look at your code for correctness when checking out. Remember, to receive credit for this lab, you MUST turn the code in online even if you have already demoed in lab 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.