 // Purpose.  Facade                     #include <iostream.h>
 //                                      #include <string.h>
 // Discussion.  Class Compute models    #define sl strlen
 // a decimal digit adder module.  An
 // entire "subsystem" can be configur-  class Compute {
 // ed by linking as many of these       public:
 // modules as the desired precision        char add( char a, char b, int& c ) {
 // requires.  The "subsystem" being           int result = a + b + c - 96;
 // modeled in main() is complex and           c = 0;
 // burdensome to use.  Wrapping this          if (result > 9) {
 // subsystem inside of a Facade that             result -= 10;
 // exports a simple interface is                 c = 1;
 // desirable.                                 }
                                               return result + 48;
 #include <iostream.h>                      }
 #include <string.h>                     };
 #define sl strlen
                                         class Facade {
 class Compute {                         public:
 public:                                 char* add( char* a, char* b ) {
    char add( char a, char b, int& c) {     int cary = 0, i = 0;
       int result = a + b + c - 96;         char c, d;
       c = 0;                               if ((sl(a) > 1) && (sl(b) > 1)) {
       if (result > 9) {                       c = ones.add( a[1], b[1], cary );
          result -= 10;                        d = tens.add( a[0], b[0], cary );
          c = 1;                            } else if (sl(a) > 1) {
       }                                       c = ones.add( a[1], b[0], cary );
       return result + 48;                     d = tens.add( a[0],  '0', cary );
    }                                       } else if (sl(b) > 1) {
 };                                            c = ones.add( b[1], a[0], cary );
                                               d = tens.add( b[0],  '0', cary );
 void main( void ) {                        } else {
    Compute  tens, ones;                       c = tens.add( a[0], b[0], cary );
    char     a[9], b[9], c, d;                 d = 'x';
    int      cary;                          }
 while (1) {                                if (cary) ans[i++] = '1';
    cout << "Enter 2 nums: ";               if (d != 'x') ans[i++] =  d;
    cin >> a >> b;                          ans[i++] = c;
    cout << "   sum is ";                   ans[i] = '\0';
    cary = 0;                               return ans;
    if ((sl(a) > 1) && (sl(b) > 1)) {    }
       c = ones.add( a[1], b[1], cary);  private:
       d = tens.add( a[0], b[0], cary);     Compute  tens, ones;
    } else if (sl(a) > 1) {                 char     ans[9];
       c = ones.add( a[1], b[0], cary);  };
       d = tens.add( a[0],  '0', cary);
    } else if (sl(b) > 1) {              void main( void ) {
       c = ones.add( b[1], a[0], cary);     Facade  f;
       d = tens.add( b[0],  '0', cary);     char    a[9], b[9];
    } else {                                while (1) {
       c = tens.add( a[0], b[0], cary);        cout << "Enter 2 nums: ";
       d = 'x';                                cin >> a >> b;
    }                                          cout <<"   sum is "<< f.add(a,b)
    if (cary) cout << '1';                        << endl;
    if (d != 'x') cout << d;             }  }
    cout << c << endl;
 }  }                                    // Enter 2 nums: 9 13
                                         //    sum is 22
 // Enter 2 nums: 99 99                  // Enter 2 nums: 19 8
 //    sum is 198                        //    sum is 27
 // Enter 2 nums: 38 83                  // Enter 2 nums: 3 99
 //    sum is 121                        //    sum is 102
 // Enter 2 nums: 5 6
 //    sum is 11

