Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

C++ A class BCheckString that is derived from the C++ Standard Library string cl

ID: 3919587 • Letter: C

Question

C++

A class BCheckString that is derived from the C++ Standard Library string class performs bounds checking and throws an exception. The BCheckString class will have two member functions:

1) A BCheckString(string s) constructor that receives a string object passed by value and passes it on to the base class constructor. It just calls the base class constructor using its constructor initialization list.

2) A overloaded operator function, char operator[ ](int k), throws an exception, a BoundsException object (i.e., StrExcept()) if its parameter, k is out bounds (i.e., negative or greater than or equal to the length of the string), otherwise it will return the character at position k in the string with calling operator [] in the string base class.

main function that attempts to access characters that are within and outside the bounds of a suitably initialized BCheckString objects

Explanation / Answer

#include <iostream>

#include <string>

#include <stdexcept>

using namespace std;

class StrExcept {

protected:

string str;

int len;

public:

StrExcept(int x,int len)

{

if (x<0)

{

throw 1;

}

else if (x>=len)

{

throw 2;

}

}

}; //String Out of Bounds Exception

// COMPLETE

class BCheckString

{

string str1;

int len1;

public:

BCheckString(string s)

{

str1=s;

len1=str1.length();

}

int length()

{

return str1.length();

}

char& operator[] (int x)

{

StrExcept s(x,len1);

return str1[x];

}

};

int main()

{

//Explain program to user

cout << "This program demonstrates bounds checking on string object.";

//Get string from user and create boundCheck string object

cout << " Enter a string: ";

string str;

getline(cin, str);

BCheckString h(str);

//Let user access characters at specified positions in the string

//COMPLETE

  

  

  

cout << "Legitimate string positions are: " << 0 << ".." << h.length() -1 << endl;

for (int k = 1; k <= 5; k++)

{

cout << "Enter an integer describing a position inside or outside the string: ";

int pos;

cin >> pos;

try {

cout << "The character at position " << pos << " is " << h[pos] << endl;

}

catch (int excp)

{

if(excp==1)

{

cout <<"err : [position below range, ie pos<0]"<< endl;

}

else

{

cout <<"err : [position beyond range, ie pos> length of char]"<< endl;

}

}

}   

  

  

  

return 0;

}