C++ cOMPLETE CODE .. PLEASE DO WITH CORRECT OUTPUT FOR THUMBSUP #include usingnamespace std; /** * * 1. Write a class Shape, which will have a public function draw(). The draw() function returns no data and output "Drawing a shape." * * 2. Write a class Circle, which is a derived class of Shape class. It only has the public draw() function overriding from Shape class. * Use normal function overriding (without using virtual keyword in the base class function) * * (this will perform Function Hiding, which means if we have a derived type pointer pointing to the derived object, * the based class method is hidden by the derived class method, and the compiler will call the derived class on because it * does not see the one in the base class.) * * (However, if you use a pointer of the base class type, even if you are pointing to the derived object, * because you are using the baseClassTypePointer->function(), this will not hide the function in the base, * so in this case, the base class one will be called) * * 3. Write a class Animal, which will have a public function makeSound(). This makeSound() function is a virtual function, which * means it is designed to be overriden if it is called from the derived class objects. It returns no data, and output the * message "The animal makes a sound." * * 4-1. Write a class Bird, which is a derived class of Animal class. It only has the public makeSound() function overriding from Animal * class. Because we have already define the makeSound() function in the base class Animal as a virtual function, so if we have a * Bird class object to call makeSound(), it will always override the makeSound() in the base class and run this one instead. * * 4-2. Write a class Dog, which is a derived class of Animal class. It only has the public makeSound() function overriding from Animal * class. Because we have already define the makeSound() function in the base class Animal as a virtual function, so if we have a * Dog class object to call makeSound(), it will always override the makeSound() in the base class and run this one instead. * * (For a virtual function, the compiler will always call the most derived version of the method that is appropriate for the object, * if the object is of a derived type object, then the derived type class function will always override the base class function) * * (So in this exercise, if we call from Animal class, as it is the base class itself, there is nothing to override. But for the * Bird type object, it always calls the Bird class definition makeSound(), and for the Dog type object, it always calls the * Dog class definition makeSound()) * */ int main() { Shape* s = new Circle(); Circle* c = new Circle(); s->draw(); // calls Shape::draw() because it is not virtual, it is not based on the derived object type, this case does not trigger Function Hiding c->draw(); // calls Circle::draw() because it overrides Shape::draw() (Function Hiding) Animal* a = new Animal(); Bird* b = new Bird(); Dog.