Design and test a reference array, Data Structure & Algorithms

Assignment Help:

Instructions

  • Design and test a reference array. Reference array stores the references to user supplied objects of different types. Just think it as a heterogeneous array which can contain elements of different types.
  • Exceptions must be used to handle all type of errors that may be encountered while using the array. The main errors are:
    • No object is found while trying to access an object from the array at a given position
    • The index may be beyond the array limits.
  • The necessary classes for the problems and also the driver main function are given. You have to provide the implementations of the member functions whose actual code is missing.

// ArrayImp.h

#include

#include

enum SortOrder { Asc, Desc};

class ArrayImp{

                protected:

                                size_t  size;

                                void ** vp;

                                ArrayImp( size_t sz);

                                ArrayImp( const ArrayImp& cp);

                                ~ ArrayImp();

                                ArrayImp& operator=(const ArrayImp & cp);

                                void * Get( size_t  index);

                                void * Put(size_t  index, const void * what);

                                void Print() const;

};

ArrayImp:: ArrayImp(size_t sz){

                if (sz > 0){

                                size = sz;

                                vp = new void* [size];

                                for ( int I = 0; I < size; i++)

                                                vp[i] = 0;

                }else{

                                vp = 0;

                                size 0;

                }

}

ArrayImp:: ArrayImp( const ArrayImp& cp){

                if ( cp.size > 0){

                                size = cp.size;

                                vp = new void * [size];

                                for ( int I = 0; i< size; i++)

                                                vp[i] = cp.vp[i];

                } else{

                                size = 0;

                                vp = 0;

                }

}

ArrayImp&  ArrayImp ::operator=(const ArrayImp & cp){

                                //  your responsibility

}

void * ArrayImp:: Get( size_t  index){

                return  vp[index];

}

void * ArrayImp:: Put(size_t  index, const void * what){

                void * oldVal = vp[index];

                vp[index] = const_cast (what);

                return oldVal;

};

void * ArrayImp:: ArrayImp:: Print() const{

                cout<<"Contents:"<

                for ( int I = 0; i< size; i++)

                                cou<

                cout<

};

// AExection.h

class  ArrayException{

                private:

                                size_t  index;                        // index causing exception

                public

                                ArrayException(size_t  pos){ index = pos;}

                                virtual const char * GetDescription() const = 0;

                                size_t   GetExceptionIndex() const{

                                                return index;

                                }

};

class NoObjectException: public ArrayException{

               public:

                                NoObjectException( size_t  pos): ArrayException(pos){}            

                                const char * GetDescription() const {

                                                return "ERROR: No object at the specified index position";

                                }

};

class RangeException: public ArrayException{

               protected:

                                size_t    size;

                public:

                                RangeException( size_t  pos, size_t   aSize): ArrayException(pos), size(aSize){}      

                                const char * GetDescription() const {

                                                 return "ERROR: Index out of bound";

                                }

                                size_t  GetArraySize() const { return  size;}

}

// SafeArray.h

#include

#include< ArrayImp.h >

#include< AExection.h>

const size_t  MAX = 256;

template

class SafeArray: private  ArrayImp{

                public:

                                SafeArray ( int sz = MAX);

                                SafeArray( const SafeArray & cp);

                                SafeArray & operator=(const SafeArray & cp);

                                ~ SafeArray();

                                int GetSize(){ return size;}

                                T& Get(size_t  pos) throw (NoObjectException, RangeException);

                                T& Put(size_t  pos, const T & thisObj) throw (RangeException);

                                T& operator[](size_t  index);

                                void Print() const;

};

// main driver program

#include

#include

#include< ArrayImp.h >

#include< AExection.h>

#include

int main(){

                SafeArray x(10), y(10);

                int  a= 10, b = -100;

                x.Put(0,a);

                x.Put(1,b);

                x.Print();

                x[1] = x[0];

                y = x;

                y.Print();

                try{

                                x[11] = x[3];

                }

                catch(const NoObjectException & exp){

                                cout<<"Caught: NoObjectException Exception"<

                                cout<<"Index Error : " <

                };

                catch(...){

 

                                cout<<"Caught an Exception<

                };

                cout<<"Trying to access beyond arrya limit"<

                try{

                                x[11] = x[12];

                }

                catch(const ArrayException& exp){

                                cout<<

                                cout<<"Index Error : " <

                };

                catch(...){

                                 cout<<"Caught an Exception<

                };

                return 0;

}


Related Discussions:- Design and test a reference array

What is assertions and abstract data types, Assertions and Abstract Data Ty...

Assertions and Abstract Data Types Even though we have defined assertions in terms of programs, notion can be extended to abstract data types (which are mathematical entities).

Define strictly binary tree, Define Strictly Binary Tree Strictly Bina...

Define Strictly Binary Tree Strictly Binary Tree: - If each non leaf node in binary tree has non empty left and right sub-trees , then the tree is known as a strictly binary t

Sparse matrix, How sparse matrix stored in the memory of a computer?

How sparse matrix stored in the memory of a computer?

Example of single node with multiple elements, The class Element represents...

The class Element represents a single node that can be part of multiple elements on a hotplate and runs in its own thread. The constructor accepts the initial temperature and a hea

Java, Ask consider the file name cars.text each line in the file contains i...

Ask consider the file name cars.text each line in the file contains information about a car ( year,company,manufacture,model name,type) 1-read the file 2-add each car which is repr

Analysis of algorithms, A common person's faith is that a computer can do a...

A common person's faith is that a computer can do anything. It is far from truth. In realism computer can carry out only definite predefined instructions. The formal illustration o

Explain the interfaces in ruby, Explain the Interfaces in Ruby Recall...

Explain the Interfaces in Ruby Recall that in object-oriented programming, an interface is a collection of abstract operations that cannot be instantiated. Even though Ruby i

State the symbols of abstract data type operation, Symbols of ADT oepration...

Symbols of ADT oeprations All Symbol ADT operations are implemented in Symbol class, except toSymbol(), which is implemented in classes (like String) which can generate a Symb

Explain the concept of hidden lines and surface removal, Explain the concep...

Explain the concept of hidden lines The problem of hidden lines or surfaces was implicit even in 2-D graphics, but we did not mention it there, because what was intended to be

Efficient way of storing a sparse matrix in memory, Explain an efficient wa...

Explain an efficient way of storing a sparse matrix in memory.   A matrix in which number of zero entries are much higher than the number of non zero entries is called sparse mat

Write Your Message!

Captcha
Free Assignment Quote

Assured A++ Grade

Get guaranteed satisfaction & time on delivery in every assignment order you paid with us! We ensure premium quality solution document along with free turntin report!

All rights reserved! Copyrights ©2019-2020 ExpertsMind IT Educational Pvt Ltd