Lecture Notes
Lecture 6: C++ Inheritance (PDF)
Lab Exercises
Take a look at this example code:
#include <stdio.h> class Shape { public: virtual ~Shape(); virtual void draw() = 0; }; class Circle : public Shape { public: virtual ~Circle(); virtual void draw(); }; Shape::~Shape() { printf("shape destructor\n"); } // void Shape::draw() { // printf("Shape::draw\n"); // } Circle::~Circle() { printf("circle destructor\n"); } void Circle::draw() { printf("Circle::draw\n"); } int main() { Shape *shape = new Circle; shape->draw(); delete shape; return 0; }
Put it in a file named lab6.cpp
and then compile it like this:
$ g++ -Wall lab6.cpp -o lab6 $ ./lab6 Circle::draw circle destructor shape destructor
Verify your understanding of how the virtual
keyword and method overriding work by performing a few experiments:
- Remove the
virtual
keyword from each location individually, recompiling and running each time to see how the output changes. Can you predict what will and will not work? - Try making
Shape::draw
non-pure by removing= 0
from its declaration. - Try changing
shape
(inmain()
) from a pointer to a stack-allocated variable.
Assignment 6
In the file rps.cpp, implement a class called Tool
. It should have an int
field called strength and a char
field called type
. You may make them either private or protected. The Tool
class should also contain the function void setStrength(int)
, which sets the strength for the Tool
.
Create 3 more classes called Rock
, Paper
, and Scissors
, which inherit from Tool
. Each of these classes will need a constructor which will take in an int
that is used to initialize the strength
field. The constructor should also initialize the type
field using 'r'
for Rock, 'p'
for Paper
, and 's'
for Scissors
.
These classes will also need a public function bool fight(Tool)
that compares their strengths in the following way:
- Rock's strength is doubled (temporarily) when fighting scissors, but halved (temporarily) when fighting paper.
- In the same way, paper has the advantage against rock, and scissors against paper.
- The
strength
field shouldn't change in the function, which returnstrue
if the original class wins in strength andfalse
otherwise.
You may also include any extra auxiliary functions and/or fields in any of these classes. Run the program without changing the main function, and verify that the results are correct.
$ g++ -Wall rps.cpp -o rps $ ./rps <your test output>
Solutions
Solutions are not available for this assignment.