Problem 10.12 -- The problem statement is a little vague about how many setter functions are required for the implementations. X and Y only or all four? Considering the size required to store the class overhead, leaving space for theta and rho seems inconsequential. If updates are relatively infrequent, it might be a good idea to update all four variables with each update. It really doesn't take computers that long to do the math. Problem 10.20 -- You can't instatiate an abstract class. (You wouldn't even know how much space to allocate). So you can't declare variables of an abstract class. However, instatiating an pointer to an abstract class is OK. You just create space for the reference and, if necessary, fill it in late. Diamond problem -- The diamond problem occurs with both D inherits from both B and C (multiply) and both B and C inherit from A. If A has a method M and both B and C override it, which M does D use? In Python the order in which the class definition for D list B and C settle the tie. In C++, virtual inheritance is used. Virtual inheritance would allow B and C to refer to the same instance of A; i.e., B::A and C::A are the same.