0. Import the existing project 'classproj' from Desktop/Exercises/classproj.zip 1. In the classproj project, add getters and setters for the MyClassA fields id and name. 2. In main.cpp, extract the integer 45 to be a local variable and the integer 7 to be a constant. Choose whatever names you like for the variables. 3. Highlight the call to myfunc() in the print() function of main.cpp. Press F3. Why isn't the name "myfunc"? Press F3 again to find out or hover over the myfunc2 method name. We have a macro that is renaming the method. This is a really bad thing to do, but note how the CDT can help you identify this situation. 4. Debug classproj. Add a breakpoint in MyClassA::tostring() on the "s << a" line. Resume execution a few times and take note of the type and value of the variable 'a'. Resume execution so that the program terminates. 5. Debug the program again and this time and clear the breakpoint in tostring(). Set a breakpoint in main.cpp at the call to print(b, ). 6. Resume the program until it hits the breakpoint and press the "Step Into" button twice. Notice how the print() call for b is calling MyClassA::myfunc2(). Resume until the program terminates. 7. MyClassB is a type of MyClassA object but we would like the appropriate version of myfunc() to be called based on the object we are dealing with. To do this, add the keyword "virtual" to the declaration of myfunc() in MyClassA.h. Save and rebuild. 8. Re-run the debugger and verify that calling print(b) uses MyClassB::myfunc() and calling print(a) uses MyClassA::myfunc(). The virtual specifier is used to tell C++ that in the case where a method name is overridden for a class and its base class, use the object's version of the method.