Given the class definition and associated code.

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).

```
#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...

What is NAT?

a. Network asynchronous transfer b. Network address translation c. Network address transfer d. None of these answers is correct.

Computer Science & Information Technology

Describe some of the physical security policies in your organization. Express them in terms that could be implemented in a computerized door locking system.

What will be an ideal response?

Computer Science & Information Technology

Explain the concept of type consistency of a path expression.

What will be an ideal response?

Computer Science & Information Technology

Which Linux-based active OS active fingerprinting tool uses a mixture of TPC, UDP, and ICMP to avoid detection?

a. Nmap b. Xprobe 2 c. Winfingerprint d. P0f

Computer Science & Information Technology