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

The \"Reason for Answer\" box is optional. A question that has round radio butto

ID: 3538138 • Letter: T

Question

The "Reason for Answer" box is optional. A question that has round radio buttons on its answer options requires only one answer. A question that has square boxes on its answer options requires one or more answers and is worth more points. Question 1 of 28 (worth 3 points) Function templates are special functions that can operate with generic types. * True False Question 2 of 28 (worth 3 points) There is a template function with the following prototype. Which statement will properly call this function? template myType GetMax (myType a, myType b); A. int x = 0; int y = 1; GetMax ; GetMax.x,y; B. int x = 0; int y = 1; int z = 0; GetMax ; z = int(x,y); C. int x = 0; int y = 1; GetMax(x,y); D. int x = 0; int y = 1; int z = 0; z = GetMax (x,y); Question 3 of 28 (worth 5 points) You have the following template class definition. template class mypair { private: T values [2]; public: mypair (T first, T second) {values[0]=first; values[1]=second;} }; Which of the following properly creates an object of this class (select all that apply)? A. mypair myobject (115, 36); B. mypair myobject(115, 36); C. mypair myobject (115, 'a'); D. mypair myobject ('a', 'b'); Question 4 of 28 (worth 3 points) Consider the following program. template class mypair { private: T a, b; public: mypair (T first, T second){a=first; b=second;} T getmax (); }; Assume that this is using namespace std and has all necessary include lines. Complete the implementation for the class function getMax. A. T mypair::getmax () { T retval; if(a>b) retval = a; else retval = b; return retval; } B. T getmax () { T retval; if(a>b) retval = a; else retval = b; return retval; } C. template T mypair::getmax () { T retval; if(a>b) retval = a; else retval = b; return T; } D. template T mypair::getmax () { T retval; if(a>b) retval = a; else retval = b; return retval; } Review Check to review before finishing (will be flagged in Table of Contents) Question 5 of 28 (worth 3 points) From the point of view of the compiler, templates are not normal functions or classes. They are compiled on demand. What does this mean? A. The code of a template function is not compiled until run time (when the program is executing) with specific template arguments as required. Until that moment, the compiler generates a generic version of the function or object as placeholders. B. The code of a template is not compiled until an object is created or function is called with specific template arguments. At that moment, when an instantiation or call is required, the compiler generates a function or object specifically for those arguments from the template. C. The code of a template function is not compiled. It is interpreted into an intermediate state known as bytecode. The bytecode is used during program execution to determine the data type required. *D. The code of a template is compiled whether or not specific template arguments is required. Because of this, the compiler generates a generic version of the function that will work with all data types. Question 6 of 28 (worth 3 points) Consider the following main function: int main() { cout << "Iterator example" << endl; vector vals; vector :: iterator p; for(int i = 0; i < 10; ++i) vals.push_back(i*2+1); // output using an iterator for(p = vals.begin( ); p < vals.end( ); ++p) cout << *p << endl; } Which of the following is an object of a template class? A. all of the above B. none of the above C. p D. vals Question 7 of 28 (worth 3 points) Consider the following main function: int main() { cout << "Iterator example" << endl; vector vals; vector :: iterator p; for(int i = 0; i < 10; ++i) vals.push_back(i*2+1); for(p = vals.begin( ); p < vals.end( ); ++p) cout << *p << endl; } What does the for loop do? A. Displays the first and last values stored in the vector. B. Displays all index numbers allocated for the vector. C. Displays the total number of values stored in the vector. D. Displays all values stored in the vector. Question 8 of 28 (worth 5 points) Which of the following functions are part of the STL list class? *A. front B. isEmpty *C. back *D. push_back Question 9 of 28 (worth 5 points) Consider the following class: class hourlyEmp: public employee { public: hourlyEmp(); hourlyEmp(const string& newName, const string& newSsn, double newPayRate, double newHours); double getHours() const; void setHours(double newHours); void giveRaise(double amount); void printCheck() const; private: double hours; double payRate; }; How could you create an object of this class (Select all that apply)? A. employee arnold("Arnold Jones","23456664",13,20); B. hourlyEmp arnold(); C. employee::hourlyEmp arnold("Arnold Jones"); D. hourlyEmp arnold("Arnold Jones","23456664",13,20); Reason for Answer Rich Text Editor Check to review before finishing (will be flagged in Table of Contents) Question 10 of 28 (worth 3 points) Which of the following is a pure abstract function? *A. virtual double area() = 0; B. virtual double area() {area= 0}; C. abstract double area(); D. pure virtual double area() = {}; Reason for Answer Rich Text Editor Review Check to review before finishing (will be flagged in Table of Contents) Question 11 of 28 (worth 5 points) Using which of the following techniques in C++ is it possible to have different functions with the same name? A. overloading B. overarching C. redefining D. overriding Reason for Answer Rich Text Editor Review Check to review before finishing (will be flagged in Table of Contents) Question 12 of 28 (worth 5 points) A programming language is required to provide which things in order for it to be considered an object oriented programming language? *A. polymorphism *B. inheritance *C. encapsulation D. function closure support Reason for Answer Rich Text Editor Review Check to review before finishing (will be flagged in Table of Contents) Question 13 of 28 (worth 3 points) Consider the following: class base { public: void vfunc() { cout << "This is base's vfunc()." << endl; } }; class derived1 : public base { public: void vfunc() { cout << "This is derived1's vfunc()." << endl; } }; int main() { base *p, b; derived1 d1; p = &b; p -> vfunc(); // remember, this is equivalent to (*p).vfunc(); p = &d1; p -> vfunc(); } What is the output of this program? A. This is base's vfunc(). This is derived1's vfunc(). B. Error. Ambiguous reference. *C. This is base's vfunc(). This is base's vfunc(). D. This is derived1's vfunc(). This is derived1's vfunc(). Reason for Answer Rich Text Editor Check to review before finishing (will be flagged in Table of Contents) Question 14 of 28 (worth 3 points) Consider the following: class base { public: virtual void vfunc() { cout << "This is base's vfunc()." << endl; } }; class derived1 : public base { public: void vfunc() { cout << "This is derived1's vfunc()." << endl; } }; int main() { base *p, b; derived1 d1; p = &b; p -> vfunc(); // remember, this is equivalent to (*p).vfunc(); p = &d1; p -> vfunc(); } What is the output of this program? A. This is derived1's vfunc(). This is derived1's vfunc(). B. Error. Ambiguous reference. *C. This is base's vfunc(). This is derived1's vfunc(). D. This is base's vfunc(). This is base's vfunc(). Question 15 of 28 (worth 3 points) When the throw keyword is written by itself, it is a way of asking the compiler to send the exception to another handler. If there is no other handler written by you, what happens? *A. the processing of the exception would be handed to the operating system. B. the processing of the exception would be ignored and the program would continue normally C. the processing of the exception could not be handled and it would cause a system shutdown D. the processing of the exception would be handed to the network. Question 16 of 28 (worth 3 points) C++ allows you to nest exceptions, using the same techniques we applied to nest conditional statements. This means that you can write an exception that depends on, and is subject to, another exception. * True False Question 17 of 28 (worth 3 points) Consider the following main function: int main() { double Operand1, Operand2, Result; cout << "This program allows you to perform a division of two numbers "; cout << "To proceed, enter two numbers: "; try { cout << "First Number: "; cin >> Operand1; cout << "Second Number: "; cin >> Operand2; if( Operand2 == 0 ) throw "Division by zero not allowed"; Result = Operand1 / Operand2; cout << " " << Operand1 << " / " << Operand2 << " = " << Result << " "; } catch(const char* Str) // Catch an exception { cout << " Bad Operator: " << Str; } return 0; } If this line is executed, which will be the next statement that follows? throw "Division by zero not allowed"; A. cout << " " << Operand1 << " / " << Operand2 << " = " << Result << " "; B. Result = Operand1 / Operand2; C. cout << " Bad Operator: " << Str; *D. None. The program will terminate. Reason for Answer Rich Text Editor Review Check to review before finishing (will be flagged in Table of Contents) Question 18 of 28 (worth 3 points) Consider the following function: Which of the following would be the best way to call this function? void Division(const double a, const double b) { double Result; if( b == 0 ) throw "Division by zero not allowed"; Result = a / b; cout << " " << a << " / " << b << " = " << Result; } Which of the following would be the best way to call this function and pass it the value 2.0 for a and the value 0 for b? A. try { Division(2.0, 0); } B. catch( Division(2.0, 0)) { cout << " Bad Operator: " << Str; } *C. try { Division(2.0, 0); } catch(const char* Str) { cout << " Bad Operator: " << Str; } D. Division(2.0, 0); throw(); catch(Exception ex) { cout << " Bad Operator: " << Str; } Check to review before finishing (will be flagged in Table of Contents) Question 19 of 28 (worth 3 points) Accessing all of the elements of a two-dimensional array requires two loops: one for the row, and one for the column. Since two-dimensional arrays are typically accessed column by column, generally the column index is used as the outer loop. * True False Review Check to review before finishing (will be flagged in Table of Contents) Question 20 of 28 (worth 3 points) You have an array declared as follows: int anArray[3][5]; Which of the following would you use to display the value stored in the second row, first column? A. cout << anArray[1][0]; B. cout << anArray[2][1]; C. cout << anArray[0][1]; D. cout << anArray[1,0]; Question 21 of 28 (worth 3 points) Given the following macro definitions #define HEIGHT 3 #define WIDTH 5 There is a multidimensional array called anArray declared as follows: int anArray[HEIGHT][WIDTH]; Consider the following code segment: for (int n=0;n < HEIGHT; n++) { //TODO: complete the for loop to populate all index numbers with the value 0. } Which of the following completed for loop could fill that previously declared anArray multidimensional array with the value 0 in each position? A. for (int n=0; n < HEIGHT; n++) { for (int m=0; m < WIDTH; m++) { anArray[n][m] = 0; } } B. for (int n=0; n < WIDTH; n++) { for (int m=0; m < HEIGHT; m++) { int anArray[n][m] = { {0,0,0}{0,0,0}{0,0,0}{0,0,0|}{0,0,0}}; } } C. for (int n=0; n < HEIGHT; n++) { for (int m=0; m < WIDTH; m++) { int anArray[0][0]; } } D. for (int n=0; n < HEIGHT; n++) { for (int m=0; m < WIDTH; m++) { } anArray[n][m] = 0; } Reason for Answer Rich Text Editor Review Check to review before finishing (will be flagged in Table of Contents) Question 22 of 28 (worth 3 points) You have the following macro statements: #define WIDTH 5 #define HEIGHT 3 You wish to copy a multidimensional array called anArray declared as follows: int anArray[HEIGHT][WIDTH]; Which statement should you use to declare the single dimensional array called copied that will hold all of the copied values from anArray? A. int copied[HEIGHT+WIDTH]; B. int copied[]; C. int copied[HEIGHT * WIDTH]; D. int copied[WIDTH]; Reason for Answer Rich Text Editor Review Check to review before finishing (will be flagged in Table of Contents) Question 23 of 28 (worth 3 points) A destructor is another special kind of class member function that is executed when an object of that class is destroyed. They are the counterpart to constructors. When a variable goes out of scope, or a dynamically allocated variable is explicitly deleted using the delete keyword, the class destructor is called (if it exists) to help clean up the class before it is removed from memory. *True False Review Check to review before finishing (will be flagged in Table of Contents) Question 24 of 28 (worth 5 points) Consider the following main function. Assume that DynamicWord.h contains a class definition for a class called DynamicWord that holds a pointer to a dynamic array as a private data member, but the assignment operator (=) has not been overloaded for this class. #include "DynamicWord.h" void main() { DynamicWord a; DynamicWord b(a); DynamicWord b = a; } Which of the above statements require(s) a copy constructor? A. DynamicWord a; B. DynamicWord b(a); C. DynamicWord b = a; Review Check to review before finishing (will be flagged in Table of Contents) Question 25 of 28 (worth 3 points) You have a class called MyBag that contains this partial implementation of the overloaded assignment operator. The first line is missing. //Missing Line goes here { if(this == &source) return; else { numUsed = source.numUsed; numAllocated=source.numAllocated; Item *newarr = new Item[numAllocated]; for(int i = 0; i newarr[i] = source.arr[i]; arr = newarr; } } Which of the following could be used as the missing line of this implementation file to overload the assignment (=) operator for the MyBag class? A. void operator MyBag=(MyBag::MyBag &source) B. MyBag& MyBag::operator =(const MyBag &source) C. void MyBag::operator =(const MyBag &source) D. void MyBag::operator =(const MyBag &this) Review Check to review before finishing (will be flagged in Table of Contents) Question 26 of 28 (worth 3 points) Here is the definition of the MyBag class: class MyBag { public: MyBag(); MyBag( MyBag& other ); ~MyBag(); int size(); void add(std::string s); void getAt(int index); int locate(std::string s); void insertAt(int index, std::string ins); void operator =(const MyBag &source); private: std::string *arr; //pointer to dynamic array int numUsed, numAllocated; void doubleCapacity(); }; Consider the following function implementation. MyBag::MyBag( MyBag& other ) { numUsed = other.numUsed; numAllocated=other.numAllocated; other.arr = arr; } What type of function is this and what is wrong with it? A. Constructor. It erroneously leaves the arr dynamic array empty. It should load the values passed as arguments from the user into the dynamic array or set them all equal to a valid default value. B. Copy constructor. It erroneously copies the pointer to the dynamic array without copying the array values. Instead, it should copy the values from the original array to a new array and direct the arr pointer to point to that newly copied array. C. Overloaded assignment operator. It eroneously copies the pointer to the dynamic array without copying the array values. Instead, it should copy the values from the original array to a new array and direct the arr pointer to point to that newly copied array. D. Destructor. It eroneously deletes the dynamic array pointer without first deleting the values held in the dynamic array. Reason for Answer Rich Text Editor Review Check to review before finishing (will be flagged in Table of Contents) Question 27 of 28 (worth 5 points) Consider the following: int anArray[3][5] = { { 1, 2, 3, 4, 5, }, // row 0 { 6, 7, 8, 9, 10, }, // row 1 { 11, 12, 13, 14, 15 } // row 2 }; func(a2); Which of the following prototypes would work for the function called func? A. func(int a[5][7]); B. func(int a[][]); C. func(int a[][7]); D. func(int a[5][]); Reason for Answer Rich Text Editor Review Check to review before finishing (will be flagged in Table of Contents) Question 28 of 28 (worth 5 points) You wish to convert a container class to a template container class. Which of the following should you consider? A. Make the class visible to the client. One way to do this is to include the main function in the header file. B. Make sure all return statements that return container data only return container data. If a return statement returns container data under certain conditions, but another return statement returns something that is not container data under other conditions, there could be a data type conflict when a different data type is used for this template. C. Make implementation visible. One way to do this is to include both interface and implementation in the header file. D. Make sure operations on container data are not type specific. For example, don't use string functions on container data.

Explanation / Answer

Question 1 of 28 (worth 3 points)
Function templates are special functions that can operate with generic types.
*True

Question 2 of 28 (worth 3 points)
There is a template function with the following prototype.
Which statement will properly call this function?
template<class myType>
myType GetMax (myType a, myType b);
D. int x = 0; int y = 1; int z = 0;
z = GetMax (x,y);

Question 3 of 28 (worth 5 points) You have the following template class definition.
template<class T>
class mypair
{
private: T values [2];
public: mypair (T first, T second)
{
values[0]=first; values[1]=second;
}
};
Which of the following properly creates an object of this class (select all that apply)?
A. mypair<int> myobject(115, 36);
D. mypair<char> myobject ('a', 'b');

Question 4 of 28 (worth 3 points)
Consider the following program.
template<class T>
class mypair
{
private:
T a, b;
public: mypair (T first, T second)
{
a=first; b=second;
}
T getmax ();
};
Assume that this is using namespace std and has all necessary include lines.
Complete the implementation for the class function getMax
D. template<class T>
T mypair::getmax ()
{
T retval;
if(a>b)
retval = a;
else retval = b;
return retval;
}

Question 5 of 28 (worth 3 points)
From the point of view of the compiler, templates are not normal functions or classes.
They are compiled on demand.
What does this mean?
B. The code of a template is not compiled until an object is created or function is called with specific template arguments.
At that moment, when an instantiation or call is required, the compiler generates a function or object specifically for those arguments from the template.

Question 6 of 28 (worth 3 points)
Consider the following main function:
int main()
{
cout << "Iterator example" << endl;
vector vals;
vector :: iterator p
for(int i = 0; i < 10; ++i)
vals.push_back(i*2+1);
// output using an iterator
for(p = vals.begin( ); p < vals.end( ); ++p)
cout << *p << endl;
}
Which of the following is an object of a template class?
D. vals

Question 7 of 28 (worth 3 points)
Consider the following main function:
int main()
{
cout << "Iterator example" << endl;
vector vals;
vector :: iterator p;
for(int i = 0; i < 10; ++i)
vals.push_back(i*2+1);
for(p = vals.begin( ); p < vals.end( ); ++p)
cout << *p << endl;
}
What does the for loop do?
D. Displays all values stored in the vector.

Question 8 of 28 (worth 5 points)
Which of the following functions are part of the STL list class?
*A. front
*C. back
*D. push_back

Question 9 of 28 (worth 5 points)
Consider the following class:
class hourlyEmp: public employee
{
public: hourlyEmp();
hourlyEmp(const string& newName, const string& newSsn, double newPayRate, double newHours);
double getHours() const;
void setHours(double newHours);
void giveRaise(double amount);
void printCheck() const;
private: double hours;
double payRate;
};
How could you create an object of this class (Select all that apply)?
B. hourlyEmp arnold();
D. hourlyEmp arnold("Arnold Jones","23456664",13,20);

Question 10 of 28 (worth 3 points)
Which of the following is a pure abstract function?
*A. virtual double area() = 0;

Question 11 of 28 (worth 5 points)
Using which of the following techniques in C++ is it possible to have different functions with the same name?
A. overloading

Question 12 of 28 (worth 5 points)
A programming language is required to provide which things in order for it to be considered an object oriented programming language?
*A. polymorphism
*B. inheritance
*C. encapsulation

Question 13 of 28 (worth 3 points)
Consider the following:
class base
{
public:
void vfunc()
{
cout << "This is base's vfunc()." << endl;
}
};
class derived1 : public base
{
public:
void vfunc()
{
cout << "This is derived1's vfunc()." << endl;
}
};
int main()
{
base *p, b;
derived1 d1;
p = &b;
p -> vfunc();
// remember, this is equivalent to (*p).vfunc();
p = &d1;
p -> vfunc();
}
What is the output of this program?
*C. This is base's vfunc(). This is base's vfunc().

Question 14 of 28 (worth 3 points)
Consider the following:
class base
{
public: virtual void vfunc()
{
cout << "This is base's vfunc()." << endl;
}
};
class derived1 : public base
{
public: void vfunc()
{
cout << "This is derived1's vfunc()." << endl;
}
};
int main()
{
base *p, b;
derived1 d1;
p = &b; p -> vfunc();
// remember, this is equivalent to (*p).vfunc();
p = &d1; p -> vfunc();
}
What is the output of this program?
*C. This is base's vfunc(). This is derived1's vfunc().

Question 15 of 28 (worth 3 points)
When the throw keyword is written by itself, it is a way of asking the compiler to send the exception to another handler.
If there is no other handler written by you, what happens?
*A. the processing of the exception would be handed to the operating system.


Question 16 of 28 (worth 3 points)
This means that you can write an exception that depends on, and is subject to, another exception.
* True

Question 17 of 28 (worth 3 points)
Consider the following main function:
int main()
{
double Operand1, Operand2, Result;
cout << "This program allows you to perform a division of two numbers ";
cout << "To proceed, enter two numbers: ";
try
{
cout << "First Number: ";
cin >> Operand1;
cout << "Second Number: ";
cin >> Operand2;
if( Operand2 == 0 )
throw "Division by zero not allowed";
Result = Operand1 / Operand2;
cout << " " << Operand1 << " / " << Operand2 << " = " << Result << " ";
} catch(const char* Str)
// Catch an exception
{
cout << " Bad Operator: " << Str;
} return 0;
}
If this line is executed, which will be the next statement that follows?
throw "Division by zero not allowed";
*C. cout << " Bad Operator: " << Str;  
once there is an exception, then it go to catch block automatically.

Question 18 of 28 (worth 3 points) Consider the following function: Which of the following would be the best way to call this function?
void Division(const double a, const double b)
{
double Result;
if( b == 0 )
throw "Division by zero not allowed";
Result = a / b;
cout << " " << a << " / " << b << " = " << Result;
}
Which of the following would be the best way to call this function and pass it the value 2.0 for a and the value 0 for b?
*C. try { Division(2.0, 0); } catch(const char* Str) { cout << " Bad Operator: " << Str; }

Question 19 of 28 (worth 3 points)
Accessing all of the elements of a two-dimensional array requires two loops: one for the row, and one for the column.
Since two-dimensional arrays are typically accessed column by column, generally the column index is used as the outer loop.
*True

Question 20 of 28 (worth 3 points)
You have an array declared as follows: int anArray[3][5];
Which of the following would you use to display the value stored in the second row, first column?
A. cout << anArray[1][0];

Question 21 of 28 (worth 3 points)
Given the following macro definitions
#define HEIGHT 3
#define WIDTH 5
There is a multidimensional array called anArray declared as follows:
int anArray[HEIGHT][WIDTH];
Consider the following code segment:
for (int n=0;n < HEIGHT; n++)
{
//TODO: complete the for loop to populate all index numbers with the value 0.
}
Which of the following completed for loop could fill that previously declared anArray multidimensional array with the value 0 in each position?
A. for (int n=0; n < HEIGHT; n++)
{
for (int m=0; m < WIDTH; m++)
{
anArray[n][m] = 0;
}
}

Question 22 of 28 (worth 3 points)
You have the following macro statements:
#define WIDTH 5
#define HEIGHT 3
You wish to copy a multidimensional array called anArray declared as follows:
int anArray[HEIGHT][WIDTH];
Which statement should you use to declare the single dimensional array called copied that will hold all of the copied values from anArray?
C. int copied[HEIGHT * WIDTH];

because it holds 3*5 = 15 elements total.

Question 23 of 28 (worth 3 points)
A destructor is another special kind of class member function that is executed when an object of that class is destroyed.
They are the counterpart to constructors.
When a variable goes out of scope, or a dynamically allocated variable is explicitly deleted using the delete keyword,
the class destructor is called (if it exists) to help clean up the class before it is removed from memory.
*True

Question 24 of 28 (worth 5 points) Consider the following main function.
Assume that DynamicWord.h contains a class definition for a class called DynamicWord that holds a pointer to a dynamic array as a private data member,
but the assignment operator (=) has not been overloaded for this class.
#include "DynamicWord.h"
void main()
{
DynamicWord a;
DynamicWord b(a);
DynamicWord b = a;
} Which of the above statements require(s) a copy constructor?
B. DynamicWord b(a);


Question 25 of 28 (worth 3 points)
you have a class called MyBag that contains this partial implementation of the overloaded assignment operator.
The first line is missing.
//Missing Line goes here
{
if(this == &source)
return;
else
{
numUsed = source.numUsed;
numAllocated=source.numAllocated
Item *newarr = new Item[numAllocated];
for(int i = 0; i
newarr[i] = source.arr[i];
arr = newarr;
}
}
Which of the following could be used as the missing line of this implementation file to overload the assignment (=) operator for the MyBag class?
B. MyBag& MyBag::operator =(const MyBag &source)


Question 26 of 28 (worth 3 points)
Here is the definition of the MyBag class:
class MyBag {
public:
MyBag();
MyBag( MyBag& other );
~MyBag();
int size();
void add(std::string s);
void getAt(int index);
int locate(std::string s);
void insertAt(int index, std::string ins);
void operator =(const MyBag &source);
private:
std::string *arr;
//pointer to dynamic array
int numUsed, numAllocated;
void doubleCapacity();
};
Consider the following function implementation.
MyBag::MyBag( MyBag& other )
{
numUsed = other.numUsed;
numAllocated=other.numAllocated;
other.arr = arr;
}
What type of function is this and what is wrong with it?
B. Copy constructor. It erroneously copies the pointer to the dynamic array without copying the array values.
Instead, it should copy the values from the original array to a new array and direct the arr pointer to point to that newly copied array.

Question 27 of 28 (worth 5 points)
Consider the following:
int anArray[3][5] = { { 1, 2, 3, 4, 5, }, // row 0
{ 6, 7, 8, 9, 10, }, // row 1
{ 11, 12, 13, 14, 15 } // row 2
};
func(a2);
Which of the following prototypes would work for the function called func?
A. func(int a[5][7]);
C. func(int a[][7]);

Question 28 of 28 (worth 5 points)
You wish to convert a container class to a template container class. Which of the following should you consider?
C. Make implementation visible. One way to do this is to include both interface and implementation in the header file.

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote