OOPortal
J2EEOnline RationalDB
prev prev
  Course navigation
    ADT conversions
Conversion example
Consider the following class, whose purpose is to print nonvisible characters with their ASCII designation; for example, the code 07 (octal) is alarm or bel.
//ASCII printable characters

class pr_char {
public:
    pr_char(int i = 0) : c(i % 128) {}
    void  print() const { cout << rep[c]; }
private:
    int           c;
    static char*  rep[128];
};

char*  pr_char::rep[128] = { "nul", "soh", "stx",
    .....
   "w", "x", "y", "z",""{", "|", "}", "~", "del" };

int main()
{
    int      i;
    pr_char  c;
    
    for (i = 0; i < 128; ++i) {
      c = i;  //or: c = static_cast<pr_char>(i);
      c.print();
      cout << endl;
    }
}
The constructor creates an automatic conversion from integers to pr_char. Notice, the c = i; statement in the loop implies this conversion. It is also possible to explicitly use a cast.
Unneeded conversions produced by conversion constructors are a source of obscure runtime bugs. Avoid this problem by using the keyword explicit to preface a single-argument constructor. This disables automatic conversion.
  Course navigation