User-defined conversions allow you to specify object conversions with constructors or with conversion functions User-defined conversions are implicitly used in addition to standard conversions for conversion of initializers, functions arguments, function return values, expression operands, expressions controlling iteration, selection statements, and explicit type conversions.
There are two types of user-defined conversions: