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

Bubble sort, Q. The reason bubble sort algorithm is inefficient is that it ...

Q. The reason bubble sort algorithm is inefficient is that it continues execution even after an array is sorted by performing unnecessary comparisons. Therefore, the number of comp

Exlain double linked list, Double Linked List In a doubly linked list, ...

Double Linked List In a doubly linked list, also known as 2 way lists, each node is separated into 3 parts. The first part is called last pointer field. It has the address of t

Define doubly linked list, A list item stores pointers and an element ...

A list item stores pointers and an element to predecessor and successor. We call a pointer to a list item a handle . This looks simple enough, but pointers are so powerful tha

Compound interest, Write the algorithm for compound interest

Write the algorithm for compound interest

List various problem solving techniques, List various problem solving techn...

List various problem solving techniques. There are two techniques:- 1.  Top down 2.  Bottom- up

Examination, Write an algorithm for binary search. What are its limitations...

Write an algorithm for binary search. What are its limitations? .

EM13845162, Do you have a library solution for this problem?

Do you have a library solution for this problem?

Explain decision tree, Decision Tree A decision tree is a diagram that ...

Decision Tree A decision tree is a diagram that shows conditions and actions sequentially and therefore shows which condition is to be considered first, second and so on. It is

Red black tree, red black tree construction for 4,5,6,7,8,9

red black tree construction for 4,5,6,7,8,9

Doubly linked list having n nodes, The time required to delete a node x fro...

The time required to delete a node x from a doubly linked list having n nodes is O (1)

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