Constructors as Conversions#

Adapted from: “Object-Oriented Programming Using C++” by Ira Pohl (Addison - Wesley)

Program that demonstrates conversions with constructors in C++#

/*********************************************************************

  Filename:  printabl.cpp
  Chapter:   6      Object Creation and Destruction
  Section:   6.1    Constructors as Conversions
  Compiler:  Borland C++     Version 5.0       Summer 1996
  Object Oriented Programming Using C++, Edition 2   By Ira Pohl

*********************************************************************/

// Adapted for g++ by Mark Khusid

// ASCII Printable characters

#include <iostream>        // changed iostream.h to iostream MK

using namespace std;       // Added by MK

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

const char*  pr_char::rep[128] = {
     "nul", "soh", "stx", "etx", "eot", "enq", "ack", "bel", "bs",  "ht",
     "nl",  "vt",  "np",  "cr",  "so",  "si",  "dle", "dc1", "dc2", "dc3",
     "dc4", "nak", "syn", "etb",  "can", "em", "sub", "esc", "fs",  "gs",
     "rs", "us", "sp", "!", "\"", "#", "$", "%", "&", "'",
     "(", ")", "*", "+", ",", "-", ".", "/", "0", "1",
     "2", "3", "4", "5", "6", "7", "8", "9", ":", ";",
     "<", "=", ">", "?", "@", "A", "B", "C", "D", "E",
     "F", "G", "H", "I", "J", "K", "L", "M", "N", "O",
     "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y",
     "Z", "[", "|", "]", "^", "_", "'", "a", "b", "c"
     "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
     "n", "o", "p", "q", "r", "s", "t", "u", "v", "w",
     "x", "y", "z", "{", "|", "}", "~", "del"};

int main()
{
   pr_char  c;

   for (int i = 0; i < 128; ++i) {
      c = i;  //or: c = static_cast<pr_char>(i);
      c.print();
      cout << endl;
   }
}

Compilation Process#

The above program is compiled and run using Gnu Compiler Collection (g++):

import os
root_dir = os.getcwd()
code_dir = root_dir + "/" + \
    "Cpp_Code/Chapter_6_1_3_Constructors_as_Conversions"
os.chdir(code_dir)
build_command = os.system("g++ printabl.cpp -w -o printabl")

Execution Process#

exec_status = os.system("./printabl")
nul
soh
stx
etx
eot
enq
ack
bel
bs
ht
nl
vt
np
cr
so
si
dle
dc1
dc2
dc3
dc4
nak
syn
etb
can
em
sub
esc
fs
gs
rs
us
sp
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
|
]
^
_
'
a
b
cd
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
del