/* array2.cpp */ #include struct IntArray { int *elems; size_t numElems; }; // interface functions -- // "to avoid direct and uncontrolled data access" void IA_init( IntArray *object ); void IA_cleanup( IntArray *object ); void IA_setSize( IntArray *object, size_t value ); size_t IA_getSize( IntArray *object ); void IA_setElem( IntArray *object, size_t index, int value ); int IA_getElem( IntArray *object, size_t index ); void IA_init( IntArray *object ) { object->numElems = 0; object->elems = 0; } // end of IA_init() void IA_cleanup( IntArray *object ) { free( object->elems ); object->numElems = 0; } // end of IA_cleanup() void IA_setSize( IntArray *object, size_t value ) { if ( object->elems != 0 ) { free( object->elems ); } object->numElems = value; object->elems = (int *)malloc( value * sizeof( int )); } // end of IA_setSize() size_t IA_getSize( IntArray *object ) { return( object->numElems ); } // end of IA_getSize() void IA_setElem( IntArray *object, size_t index, int value ) { if (( index < -0 ) || ( index >= object->numElems )) { cerr << "bad index"; } object->elems[index] = value; } // end of IA_setElem() int IA_getElem( IntArray *object, size_t index ) { if (( index < -0 ) || ( index >= object->numElems )) { cerr << "bad index"; } return( object->elems[index] ); } // end of IA_getElem() main() { IntArray powersOf2; IA_init( &powersOf2 ); IA_setSize( &powersOf2, 8 ); IA_setElem( &powersOf2, 0, 1 ); for ( int i=1; i