a) Modify the code implementing the operator[] to throw an int exception if the index is out of the declared array range. The exception object is to have the value of the out-of-range index. Be sure you add an exception specification to the operator function. b) Modify the code in main that calls operator[] to catch the exception and terminate the program using exit(1).

Given the class definition and associated code.
What will be an ideal response?
```
#include
using namespace std;
class intVec
{
public:
intVec();
intVec(int n);
// other members
int& operator[](int index);

private:

int* v;
int size;
};

intVec::intVec(int n): v(new int[n])
{
for (int i=0; i < n; i++) v[i] =0;
}

int& intVec::operator[](int index)
{
return v[index];
}

int main()
{
intVec myVec(10);

{
//Block enclosing "for" is because VC++ does not
//define for loop control variables inside the
//"for" loop block as the C++ Standard requires

for(int i = 0; i < 10; i++)
myVec[i] = (i-5)*(i-5);
}
{
for(int i = 0; i < 10; i++)
cout << myVec[i] << " ";
cout << endl;
}
int i = -1;
cout << "accessing myVec[" << i << "]" << endl;
cout << myVec[i] << endl;
return 0;
}
```

```
I have bolded the lines changed in the problem
statement to create the answer:

#include
#include
using namespace std;

class intVec
{
public:
intVec();
intVec(int n);
// other members
int& operator[](int index) throw (int);
private:

int* v;
int size;
};
intVec::intVec(int n): v(new int[n]), size(n)
{
for (int i=0; i < size; i++) v[i] =0;
}
//this function changed to an add exception specification
//and catching out-of-range index values
int& intVec::operator[](int index) throw (int)
{
if( 0 <= index && index < size)
return v[index];
else
throw index;
}

int main()
{
intVec myVec(10);

try
{
for(int i = 0; i < 10; i++)
myVec[i] = (i-5)*(i-5);
}
catch(int e)
{
cout << "Caught illegal index of " << e
<< "\nTerminating the program\n";
exit(1);
}

try
{
for(int i = 0; i < 10; i++)
cout << myVec[i] << " ";
cout << endl;
}
catch(int e)
{
cout << "Caught illegal index of " << e
<< "\nTerminating the program\n";
exit(1);
}

int i = -1;
cout << "accessing myVec[" << i << "]" << endl;

try
{
cout << myVec[i] << endl;
}
catch (int e)
{
cout << "Caught illegal index of" << e
<< "\nTerminating the program\n";
exit(1);
}
return 0;
}
```

Computer Science & Information Technology

You might also like to view...

How does branch prediction reduce the branch penalty?

What will be an ideal response?

Computer Science & Information Technology

Solve the system of equations.

A.
B.
C.
D. Infinite number of solutions
E. No solution

Computer Science & Information Technology