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

Algorithms, Write an algorithm to print all even numbers in descending orde...

Write an algorithm to print all even numbers in descending order and draw the flowchart

Determine the precondition of a binary search, Determine the precondition o...

Determine the precondition of a binary search For instance, precondition of a binary search is that array searched is sorted however checking this precondition is so expensive

Polynomials, Polynomials like  5x 4    +  2x 3    +  7x 2     +  10x  -  8...

Polynomials like  5x 4    +  2x 3    +  7x 2     +  10x  -  8  can  be  represented by using arrays. Arithmetic operations such as addition & multiplication of polynomials are com

How can a lock object be called in the transaction, How can a lock object b...

How can a lock object be called in the transaction? By calling Enqueue and Dequeue in the transaction.

Test whether a binary tree is a binary search tree, Q. Write down an algori...

Q. Write down an algorithm to test whether a Binary Tree is a Binary Search Tree.              A n s . The algorithm to check whether a Binary tree is as Binary Search

Dynamic programming., Count Scorecards(30 points) In a tournament, N playe...

Count Scorecards(30 points) In a tournament, N players play against each other exactly once. Each game results in either of the player winning. There are no ties. You have given a

Postfix expression algorithm, Write an algorithm to calculate a postfix exp...

Write an algorithm to calculate a postfix expression.  Execute your algorithm using the given postfix expression as your input : a b + c d +*f ↑ . T o evaluate a postfix expr

Program for binary search, Illustrates the program for Binary Search. P...

Illustrates the program for Binary Search. Program: Binary Search /*Header Files*/ #include #include /*Functions*/ void binary_search(int array[ ], int value,

Find the complexity of an algorithm, Q.1 What is an algorithm? What are the...

Q.1 What is an algorithm? What are the characteristics of a good algorithm? Q.2 How do you find the complexity of an algorithm? What is the relation between the time and space c

Program segment for deletion of any element from the queue, Program segment...

Program segment for deletion of any element from the queue delete() { int delvalue = 0; if (front == NULL) printf("Queue Empty"); { delvalue = front->value;

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