Data Abstraction and Problem Solving with C++ Walls and Mirrors