INSTRUCTIONS In this assignment you will create and use a set of classes to draw basic shapes for a quiz on area and perimeter. You will implement these classes: • QuizShape o Members ▪ A border character, a char ▪ An inner character, a char ▪ A quiz label, a string • Rectangle o A Rectangle is a QuizShape o Members ▪ A quiz label ▪ A border character ▪ An inner character ▪ Height, an integer ▪ Width, an integer • Height and width must both be greater than 3 or greater. If a value less than 3 is passed in, set to 3. • Square o A Square is a Rectangle o Members ▪ A border character ▪ An inner character ▪ A quiz label ▪ A Height and Width. • Remember, a square must always be square. The height and width should always be equal. Never allow a square with unequal sides. You will need to address this in the constructor. • DoubleSquare o A DoubleSquare is a Square ▪ Two squares of the same size are drawn separated by spaces. See the sample run. o Members ▪ A border character ▪ An inner character ▪ A quiz label ▪ A Height and Width. • Both squares use the same height and width values • Remember, a square must always be square. The height and width should always be equal. Never allow a square with unequal sides. You will need to address this in the constructor. Use the principles of inheritance to minimize the amount of code you actually write. If a base class already does something, the derived class should not reinvent the wheel. Each class should define or have access to: • One constructor has parameters for every member variable the class can access. Call parent constructors when appropriate. • void draw(); o The shape is drawn using its border character and its inner character. For example, a rectangle with a width of 10, a height of 5, and a border character ‘+’, and a inner character ‘.’ would be drawn like this: ++++++++++ +........+ +........+ +........+ ++++++++++ o Note: when drawing a square, it won’t look like a square due the font in the window uses when you run your program. As long as it has the correct number of border characters and inner characters, we are going to call it a square. • int getArea(); o Returns the area of the shape • getPerimeter(); o returns the perimeter of the shape • getters for each data member the class knows about Setting up your code. • In shape.h, define the classes and the prototypes for all methods and constructors in each class. o The order in which you define the classes will matter o IMPORTANT: Add these three lines, exactly as written, to the public section of the QuizShape class: virtual void draw( ) = 0; virtual int getArea( ) = 0; virtual int getPerimeter( ) = 0; • In shape.cpp, implement all the methods and constructors that are defined in shape.h o IMPORTANT: Do not write any code in shape.cpp for draw( ), getArea ( ), and getPerimeter ( ) for the QuizShape class. o Implement for draw( ), getArea ( ), and getPerimeter ( ) for Rectangle, Square, and DoubleSquare as needed. o Implement getters as needed in all classes • In pass7.cpp o Implement the following function void quizUser (QuizShape &shape); This function should display the label of the shape, draw it, and have the user guess its area and perimeter. Tell them if they are correct or if they need to work on their geometry skills (in a polite way, of course) o main() ▪ Main should create a sample of each shape and pass it to the quizUser() function. ▪ When creating the labels for each shape, add the dimensions to the label name. For example, the label for a Rectangle that is 10 height and 5 wide would be “5x10 Rectangle” ▪ Do not cout anything in main(). It should just create shapes and pass them to quizUser(). Notes • It is ok to define multiple classes in one .h file. Programmers often do this to group related classes. Same goes for .cpp files. • No main() in shape.cpp. • The lines like this: virtual void draw( ) = 0; are how we define “pure virtual functions”. This is C++’s way of saying a class knows about a function, without the function actually existing. See section 15.7 in the book and be sure to ask your instructor for tips and clarification. Think of it this way: What is the area and perimeter of a QuizShape? Not a Rectangle, or Square, but a QuizShape? There isn’t one, is there. A QuizShape is a basic idea, an abstract idea. A Rectangle is a concrete idea. A QuizShape can define the fact that all shapes have an area and a perimeter, and can be drawn, but it can’t actually do any of that itself. Pure virtual functions are what allow us to accomplish this in C++. Sample Run Your output should look similar to the following. Things in bold are typed by the user. Welcome to the Shape Quiz The Shape: 5x7 Rectangle +++++++ +.....+ +.....+ +.....+ +++++++ What is the total area? 35 Congratulations! You are correct What is the total perimeter? 24 Congratulations! You are correct The Shape: 4x4 Square **** *--* *--* **** What is the total area? 16 Congratulations! You are correct What is the total perimeter? 12 Sorry :-( The correct answer is 16 The Shape: Two 3x3 Square +++ +++ +.+ +.+ +++ +++ What is the total area? 9 Sorry :-( The correct answer is 18 What is the total perimeter? 24 Congratulations! You are correct Thanks for quizzing with us!