principle and practice using c++