PLEASE C++ ONLY Recall that in C++, there is no check on an array index out of b
ID: 3860012 • Letter: P
Question
PLEASE C++ ONLY
Recall that in C++, there is no check on an array index out of bounds. However, during program execution, an array index out of bounds can cause serious problems. Also, in C++, the array index starts at 0. Design and implement the class myArray that solves the array index out of bounds problem and also allows the user to begin the array index starting at any integer, positive or negative. Every object of type myArray is an array of type int. During execution, when accessing an array component, if the index is out of bounds, the program must terminate with an appropriate error message. Consider the following statements: myArray list (5);//Line 1 myArraycinto myList (2, 13);//Line 2 myArray yourList(-5, 9);//Line 3 The statement in Line 1 declares list to be an array of 5 components, the component type is int, and the components are: list [0], list[1], ..., list[4]: the statement in Line 2 declares myList to be an array of 11 components, the component type is int, and the components are: myList[2], myList [3], ..., myList [12]: the statement in line 3 declares yourList to be an array of 14 components, the component type is int, and the components are: yourList[-5], yourList[-4], ..., yourList[0], ..., yourList [8]. Write a program to test the class myArray.Explanation / Answer
#include<iostream>
#include <stdexcept>
using namespace std;
template <class T>
class myArray {
private:
int baseIndex;
int size;
T *arr;
public:
myArray(int size) {
this->baseIndex = 0;
this->size = size;
arr = new T[this->size];
}
myArray(int baseIndex, int lastIndex) {
this->baseIndex = baseIndex;
this->size = lastIndex - baseIndex;
arr = new T[this->size];
}
T operator [](int i) const {
if (i >= size + baseIndex || i < baseIndex)
throw runtime_error ("Array Index out of bound");
return arr[i - baseIndex];
}
T & operator [](int i) {
if (i >= size + baseIndex || i < baseIndex)
throw runtime_error ("Array Index out of bound");
return arr[i - baseIndex];
}
};
int main() {
myArray<int> list(5);
try {
list[0] = 1;
list[1] = 3;
list[2] = 5;
list[3] = 7;
cout << "list[0] = " << list[0] << endl;
cout << "list[1] = " << list[1] << endl;
cout << "list[2] = " << list[2] << endl;
cout << "list[3] = " << list[3] << endl;
cout << "list[5] = " << list[5] << endl;
} catch (runtime_error &e) {
cout << "Caught a runtime_error exception: " << e.what () << ' ';
}
myArray<int> list1(-1, 3);
try {
list1[0] = 1;
list1[1] = 3;
list1[2] = 5;
list1[3] = 7;
cout << "list1[0] = " << list[0] << endl;
cout << "list1[1] = " << list[1] << endl;
cout << "list1[2] = " << list[2] << endl;
cout << "list1[3] = " << list[3] << endl;
cout << "list1[5] = " << list[5] << endl;
} catch (runtime_error &e) {
cout << "Caught a runtime_error exception: " << e.what () << ' ';
}
}
Happy with the code? Please let me know!
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.