Programming Abstractions in C++