Primitive types, conversions and user-defined data types in C++