The data representation and behavior of the intrinsic or primitive types is already known to the compiler.
An abstract data type is not known to the compiler.
The C++ programmer defines the type's format and behavior in a class definition.