Abstract data types implemented in C++