return (0) 2. Write the prototypes (where necessary) and the definitions of the following hierarchy: (total 78 points) Shape is an abstract base class. Define two private integer variables, center x and center y and a virtual method called area in that class. Shape should have only one constructor initializer that takes center_x and center y as arguments. It should also have two public methods, getCenter X) that returns center x and geiCenter Y that returns center y. Shape also contains function print (10 points) Define two derived classes, Rectangle and Cirele from Shape which use public inheritance. Also define two private double variables length and width in Rectangle and one private double variable, radius in Circle. Override method area of class Shape as well as print() Rectangle should have one default constructor without parameters and one constructor initializer Include a copy constructor in the class Rectangle as well. Include two get methods. (10 points) Circle has one default constructor without parameters and one constructor initializer. Override method area of class Shape as well as well as print(). Include a copy constructor in the class Circle. Include one get method. (10 points) A copy constructor is a constructor that takes an object of the same class as an argument and creates a new object by copying all the attributes of the object. The example below shows the copy constructor in a class called myClass. . class MyClass public: myClass (const myClass& obj) [ Code // Copy constructor (10 points for each copy constructors-total 20 points) Design two non-member functions print (do not change the name print) for class Reetangle and Circle. (for two non-member functions print - total 10 points) In the main() program, (20 points) The requirements for main() are specified in the partial code