#!/bin/sh # This is a shar archive. # The rest of this file is a shell script which will extract: # # 6_8a.c 6_8a.cmp 6_8a0.h 6_8a1.h 6_8a2.h 6_8a3.h 6_8a_tst.c 6_8a_tst.h makefile # # To extract the files from this shell archive file simply # create a directory for this file, move the archive file # to it and enter the command # # sh filename # # The files will be extracted automatically. # Note: Do not use csh. # # Archive created: Mon Jul 30 23:08:26 EDT 1990 # echo x - 6_8a.c sed 's/^X//' > 6_8a.c << '!EOF!' /* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */ /* The C++ Answer Book */ /* Tony Hansen */ /* All rights reserved. */ // Exercise 6.8 // Define a class INT which acts just like integers #ifndef INT_H # define INT_H #include "6_8a0.h" /* EXPAND */ #include "6_8a1.h" /* EXPAND4 */ #include "6_8a2.h" /* EXPAND4 */ #include "6_8a3.h" /* EXPAND4 */ }; #endif /* INT_H */ !EOF! ls -l 6_8a.c echo x - 6_8a.cmp sed 's/^X//' > 6_8a.cmp << '!EOF!' I1=9 i1=9 I2=200 i2=200 !EOF! ls -l 6_8a.cmp echo x - 6_8a0.h sed 's/^X//' > 6_8a0.h << '!EOF!' /* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */ /* The C++ Answer Book */ /* Tony Hansen */ /* All rights reserved. */ struct INT { int i; // ... !EOF! ls -l 6_8a0.h echo x - 6_8a1.h sed 's/^X//' > 6_8a1.h << '!EOF!' /* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */ /* The C++ Answer Book */ /* Tony Hansen */ /* All rights reserved. */ // constructors INT() {} // INT x; INT(int &j) { i = j; } // INT x = 0; INT(INT &j) { i = j.i; } // INT x = INT !EOF! ls -l 6_8a1.h echo x - 6_8a2.h sed 's/^X//' > 6_8a2.h << '!EOF!' /* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */ /* The C++ Answer Book */ /* Tony Hansen */ /* All rights reserved. */ // conversion to int operator int() { return i; } !EOF! ls -l 6_8a2.h echo x - 6_8a3.h sed 's/^X//' > 6_8a3.h << '!EOF!' /* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */ /* The C++ Answer Book */ /* Tony Hansen */ /* All rights reserved. */ // assignment operators INT operator +=(int j) { return (i += j); } INT operator -=(int j) { return (i -= j); } INT operator *=(int j) { return (i *= j); } INT operator /=(int j) { return (i /= j); } INT operator %=(int j) { return (i %= j); } INT operator &=(int j) { return (i &= j); } INT operator ^=(int j) { return (i ^= j); } INT operator |=(int j) { return (i |= j); } INT operator <<=(int j) { return (i <<= j); } INT operator >>=(int j) { return (i >>= j); } INT operator ++() { return (i++); } INT operator --() { return (i--); } !EOF! ls -l 6_8a3.h echo x - 6_8a_tst.c sed 's/^X//' > 6_8a_tst.c << '!EOF!' /* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */ /* The C++ Answer Book */ /* Tony Hansen */ /* All rights reserved. */ #include #include "6_8a.c" main() { INT I1 = 9; int i1 = 9; INT I2; int i2 = 0; INT I3 = I2; int i3 = i2; int X = 1, Y = 2; int x = 1, y = 2; X = I1; x = i1; I2 = Y; i2 = y; I2 = I1; i2 = i1; I2 = 9; i2 = 9; I2 = I1 + 99; i2 = i1 + 99; I2 = I1 + I1; i2 = i1 + i1; I2 *= 5; i2 *= 5; I2 += 9; i2 += 9; I2 += I2; i2 += i2; I2++; i2++; ++I2; ++i2; cout << "I1=" << int(I1) << "\n"; cout << "i1=" << int(i1) << "\n"; cout << "I2=" << int(I2) << "\n"; cout << "i2=" << int(i2) << "\n"; return 0; // DELETE } !EOF! ls -l 6_8a_tst.c echo x - 6_8a_tst.h sed 's/^X//' > 6_8a_tst.h << '!EOF!' /* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */ /* The C++ Answer Book */ /* Tony Hansen */ /* All rights reserved. */ struct INT { int i; // constructors INT() {} // INT x; INT(int j) { i = j; } // INT x = 0; INT(INT j) { i = j.i; } // INT x = INT // conversion to int operator int() { return i; } // assignment operators INT operator +=(int j) { return (i += j); } INT operator -=(int j) { return (i -= j); } INT operator *=(int j) { return (i *= j); } INT operator /=(int j) { return (i /= j); } INT operator %=(int j) { return (i %= j); } INT operator &=(int j) { return (i &= j); } INT operator ^=(int j) { return (i ^= j); } INT operator |=(int j) { return (i |= j); } INT operator <<=(int j) { return (i <<= j); } INT operator >>=(int j) { return (i >>= j); } // INT operator ++() { return (i++); } // INT operator --() { return (i--); } }; !EOF! ls -l 6_8a_tst.h echo x - makefile sed 's/^X//' > makefile << '!EOF!' CC= CC -I. -I../../CC all: 6_8a 6_8a: 6_8a.c 6_8a_tst.c 6_8a0.h 6_8a1.h 6_8a2.h 6_8a3.h $(CC) 6_8a_tst.c -o 6_8a CMP= 6_8a.cmp OUT= 6_8a.out 6_8a.out: 6_8a ; 6_8a > 6_8a.out test: all $(OUT) $(CMP) cmp 6_8a.out 6_8a.cmp echo tests done !EOF! ls -l makefile # The following exit is to ensure that extra garbage # after the end of the shar file will be ignored. exit 0