Homework No.3

[Advanced C++ Topics]

The number of your particular task is the value of the expression faculty_number%21.

0. Define a class Deque that represents a deque of strings by keeping its elements in a dynamically allocated array (with maximum capacity) and make the deque as a "circular array" (the first element follows the last one).
Supply the "big three" memory management functions. Use this class to demonstrate
(a) the difference between initialization
        Deque s;
        Deque t = s;
and assignment operation
        Deque s;
        Deque t;
        s = t;
(b) the fact that all constructed objects are automatically destroyed
(c) the fact that the copy constructor is invoked if an object is passed by value to a function
(d) the fact that the copy constructor is not invoked when a parameter is passed by reference
(e) the fact that the copy constructor is used to copy a return value to the caller.
Supply member functions size, push_front and push_back. Overload the -- unary prefix operator (--s) for pop_front operation and -- postfix operator (s--) for pop_back operation. Overload the stream operators << and >> for output and input deque elements. Demonstrate all these functions and operators.

1. Define a class Queue that represents a queue of strings by keeping its elements in a dynamically allocated array (with maximum capacity) and make the queue as a "circular array" (the first element follows the last one).
Supply the "big three" memory management functions. Use this class to demonstrate
(a) the difference between initialization
        Queue s;
        Queue t = s;

and assignment operation
        Queue s;
        Queue t;
        s = t;

(b) the fact that all constructed objects are automatically destroyed
(c) the fact that the copy constructor is invoked if an object is passed by value to a function
(d) the fact that the copy constructor is not invoked when a parameter is passed by reference
(e) the fact that the copy constructor is used to copy a return value to the caller.
Supply a member function size(). Overload the += binary operator for push an element to a queue and the -- unary operator for pop an element from the queue. For example
        Queue q;
        q += "abc";
        q--;

produces an empty queue. Overload the stream operators << and >> for output and input queue elements. Demonstrate all these functions and operators.

2. Define a class Stack that represents a stack of strings by keeping its elements in a dynamically allocated array (with maximum capacity). Supply the "big three" memory management functions.  Use this class to demonstrate
(a) the difference between initialization
        Stack s;
        Stack t = s;

and assignment
        Stack s;
        Stack t;
        s = t;

(b) the fact that all constructed objects are automatically destroyed
(c) the fact that the copy constructor is invoked if an object is passed by value to a function
(d) the fact that the copy constructor is not invoked when a parameter is passed by reference
(e) the fact that the copy constructor is used to copy a return value to the caller.
Supply member functions push and pop that add and remove an element to and from a stack. Overload the + operator for joint two stacks with return value a new stack, produced by repeatedly removing an element from the second stack and add it to the first stack. Overload the stream operators << and >>. Demonstrate all these functions and operators.

3. Define a class Rectangle with sides, parallel to the coordinate axes. A rectangle is defined by two points in the plane - upper-left and lower-right corners. Store the data members in a dynamically allocated array of integers.
 Supply the "big three" memory management functions. Use this class to demonstrate
(a) the difference between initialization
        Rectangle s;
        Rectangle t = s;

and assignment operation
        Rectangle s;
        Rectangle t;
        s = t;

(b) the fact that all constructed objects are automatically destroyed
(c) the fact that the copy constructor is invoked if an object is passed by value to a function
(d) the fact that the copy constructor is not invoked when a parameter is passed by reference
(e) the fact that the copy constructor is used to copy a return value to the caller.
Supply member functions that calculate the perimeter and the area of the rectangle. Overload the && operator that return the intersection of two rectangles and the > and < operators (with boolean return values) to compare two rectangles with respect to their areas. Overload the stream operators << and >>. Demonstrate all these functions and operators.

4. Define a class Triangle that stores the side lengths of a triangle, by keeping the numbers in a dynamically allocated array of doubles.
Supply the "big three" memory management functions. Use this class to demonstrate
(a) the difference between initialization
        Triangle s;
        Triangle t = s;

and assignment operation
        Triangle s;
        Triangle t;
        s = t;

(b) the fact that all constructed objects are automatically destroyed
(c) the fact that the copy constructor is invoked if an object is passed by value to a function
(d) the fact that the copy constructor is not invoked when a parameter is passed by reference
(e) the fact that the copy constructor is used to copy a return value to the caller.
Supply a member functions that calculate the perimeter and the area of the triangle. Overload the ++ operator (prefix and postfix forms) that add 1 to the length of the each triangle side and the > operator (with boolean return value) to compare two triangles with respect to their areas. Overload the stream operators << and >>. Demonstrate all these functions and operators.

5. Define a class Cubic that stores the coefficients of a polynomial of degree 3 in a dynamically allocated array of doubles. Supply the "big three" memory management functions. Use this class to demonstrate
(a) the difference between initialization
        Cubic s;
        Cubic t = s;
and assignment operation
        Cubic s;
        Cubic t;
        s = t;

(b) the fact that all constructed objects are automatically destroyed
(c) the fact that the copy constructor is invoked if an object is passed by value to a function
(d) the fact that the copy constructor is not invoked when a parameter is passed by reference
(e) the fact that the copy constructor is used to copy a return value to the caller.
Supply a member function which calculates the value of the polynomial for a given argument value. Overload + and - operators for addition and subtraction of two polynomials and the unary operator * which return true or false when the corresponding cubic function has or has not critical points. (We say that a function f(x) has a critical point z when its derivative has value null at this point, i.e. f '(z) = 0.) Overload the stream operators << and >>. Demonstrate all these functions and operators.

6. Define a class Quadratic that stores the coefficients of a quadratic polynomial in a dynamically allocated array of doubles. Supply the "big three" memory management functions. Use this class to demonstrate
(a) the difference between initialization
        Quadratic s;
        Quadratic t = s;
and assignment operation
        Quadratic s;
        Quadratic t;
        s = t;
(b) the fact that all constructed objects are automatically destroyed
(c) the fact that the copy constructor is invoked if an object is passed by value to a function
(d) the fact that the copy constructor is not invoked when a parameter is passed by reference
(e) the fact that the copy constructor is used to copy a return value to the caller.
Supply a member function which calculates the value of a quadratic function for a given argument value. Overload + and - operators for addition and subtraction of two polynomials and the unary operator * which return true or false when the corresponding quadratic equation has or has not real roots. Overload the stream operators << and >>. Demonstrate all these functions and operators.

7. Define a class Polynomial that stores the coefficients of a polynomial of n-th degree in a dynamically allocated array of integers.
Supply the "big three" memory management functions. Use this class to demonstrate
(a) the difference between initialization
        Polynomial s;
        Polynomial t = s;
and assignment
        Polynomial s;
        Polynomial t;
        s = t;
(b) the fact that all constructed objects are automatically destroyed
(c) the fact that the copy constructor is invoked if an object is passed by value to a function
(d) the fact that the copy constructor is not invoked when a parameter is passed by reference
(e) the fact that the copy constructor is used to copy a return value to the caller.
Supply a member function which calculates the value of a polynomial for a given argument value. Overload + and - operators for addition and subtraction of two polynomials (with degrees m and n, and generally m not equal to n) and * for multiplying a polynomial with a real number. Overload the stream operators << and >>. Demonstrate all these functions and operators.

8. Define a class Vector that stores n-dimensional vector, by keeping its elements in a dynamically allocated array of integers. Supply the "big three" memory management functions. Use this class to demonstrate
(a) the difference between initialization
        Vector s;
        Vector t = s;
and assignment operation
        Vector s;
        Vector t;
        s = t;
(b) the fact that all constructed objects are automatically destroyed
(c) the fact that the copy constructor is invoked if an object is passed by value to a function
(d) the fact that the copy constructor is not invoked when a parameter is passed by reference
(e) the fact that the copy constructor is used to copy a return value to the caller.
Supply a friend function which calculates the linear dependence and independence of two vectors (bool return value). Overload + and - operators for addition and subtraction of two vectors and * for multiplying a vector with a real number. Overload the stream operators << and >>. Demonstrate all these functions and operators.

9. Define a class Matrix2 that stores two dimensional matrix, by keeping its elements in a dynamically allocated array of integers (int **a;).
Supply the "big three" memory management functions. Use this class to demonstrate
(a) the difference between initialization
        Matrix2 s;
        Matrix2 t = s;
and assignment operation
        Matrix2 s;
        Matrix2 t;
        s = t;
(b) the fact that all constructed objects are automatically destroyed
(c) the fact that the copy constructor is invoked if an object is passed by value to a function
(d) the fact that the copy constructor is not invoked when a parameter is passed by reference
(e) the fact that the copy constructor is used to copy a return value to the caller.
Supply a member function which calculates the rank of the matrix. Overload + operator for addition of two matrices, * for multiplying a matrix with a real number and the unary ~ operator for calculating the inverse matrix. Overload the stream operators << and >>. Demonstrate all these functions and operators.

10. Define a class Biginteger that stores arbitrary large integers, by keeping their digits in a dynamically allocated array of integers.
Supply the "big three" memory management functions. Use this class to demonstrate
(a) the difference between initialization
        Biginteger s;
        Biginteger t = s;
and assignment operation
        Biginteger s;
        Biginteger t;
        s = t;
(b) the fact that all constructed objects are automatically destroyed
(c) the fact that the copy constructor is invoked if an object is passed by value to a function
(d) the fact that the copy constructor is not invoked when a parameter is passed by reference
(e) the fact that the copy constructor is used to copy a return value to the caller.
Supply a constructor Biginteger(string) that reads a sequence of digits from a string. Overload + and - operators to add and subtract the digit sequences. Overload the stream operators << and >>. Demonstrate all these functions and operators.

11. Define a class Date that stores day, month and year in a dynamically allocated array of integers.
Supply the "big three" memory management functions. Use this class to demonstrate
(a) the difference between initialization
        Date s;
        Date t = s;
and assignment operation
        Date s;
        Date t;
        s = t;
(b) the fact that all constructed objects are automatically destroyed
(c) the fact that the copy constructor is invoked if an object is passed by value to a function
(d) the fact that the copy constructor is not invoked when a parameter is passed by reference
(e) the fact that the copy constructor is used to copy a return value to the caller.
Supply get and set member functions for day, month and year. Overload ++ and -- operators (prefix and postfix forms) to set a new date - a day later or before the argument (current) value, and the stream operators << and >>. Demonstrate all these functions and operators.

12. Define a class Set that stores integers in a dynamically allocated array of integers. In a set, the order of elements does not matter, and every element can occur at most once.
Supply the "big three" memory management functions. Use this class to demonstrate
 (a) the difference between initialization
        Set s;
        Set t = s;
and assignment
        Set s;
        Set t;
        s = t;
(b) the fact that all constructed objects are automatically destroyed
(c) the fact that the copy constructor is invoked if an object is passed by value to a function
(d) the fact that the copy constructor is not invoked when a parameter is passed by reference
(e) the fact that the copy constructor is used to copy a return value to the caller.
Supply the add and remove member functions to add and remove set elements; size and contains member functions. Overload the << and >> operators. Demonstrate all these functions and operators.

13. Define a class Multiset that stores integers in a dynamically allocated array of integers. In a multiset, the order of elements does not matter, and elements can occur many times.
Supply the "big three" memory management functions. Use this class to demonstrate
(a) the difference between initialization
        Multiset a;
        Multiset b = a;
and assignment
        Multiset s;
        Multiset t;
        s = t;
(b) the fact that all constructed objects are automatically destroyed
(c) the fact that the copy constructor is invoked if an object is passed by value to a function
(d) the fact that the copy constructor is not invoked when a parameter is passed by reference
(e) the fact that the copy constructor is used to copy a return value to the caller.
Supply add and remove member functions to add and remove set elements; int size(), bool contains(int f) and int count(int f) member functions. The last function counts appearances of the number f in the multiset. Overload the ++ operator (prefix and postfix forms) for doubling all elements, which contain only once. Also overload -- operator (prefix and postfix forms) in such a way that the set (a++)-- is the same as a. Overload the stream operators << and >>. Demonstrate all these functions and operators.

14. Define a class Deque_double that represents a deque of doubles by keeping its elements in a dynamically allocated array (with maximum capacity) and make the deque as a "circular array" (the first element follows the last one).
Supply the "big three" memory management functions. Use this class to demonstrate
(a) the difference between initialization
        Deque_double s;
        Deque
_double t = s;
and assignment operation
        Deque
_double s;
        Deque
_double t;
        s = t;
(b) the fact that all constructed objects are automatically destroyed
(c) the fact that the copy constructor is invoked if an object is passed by value to a function
(d) the fact that the copy constructor is not invoked when a parameter is passed by reference
(e) the fact that the copy constructor is used to copy a return value to the caller.
Supply member functions size, push_front and push_back. Overload the -- unary prefix operator (--d) for pop_front operation and -- postfix operator (d--) for pop_back operation. Overload the stream operators << and >> for output and input deque objects. Demonstrate all these functions and operators.

15. Define a class Queue_time that represents a queue of Time objects (from our textbook) by keeping its elements in a dynamically allocated array (with maximum capacity) and make the queue as a "circular array" (the first element follows the last one).
Supply the "big three" memory management functions. Use this class to demonstrate
(a) the difference between initialization
        Queue
_time s;
        Queue
_time t = s;
and assignment operation
        Queue
_time s;
        Queue
_time t;
        s = t;

(b) the fact that all constructed objects are automatically destroyed
(c) the fact that the copy constructor is invoked if an object is passed by value to a function
(d) the fact that the copy constructor is not invoked when a parameter is passed by reference
(e) the fact that the copy constructor is used to copy a return value to the caller.
Supply a member function size(). Overload the += binary operator for push an element to a queue and the -- unary operator for pop an element from the queue. For example
        Queue
_time q;
        q += Time(10,10,0);
        q--;

produces an empty queue. Overload the stream operators << and >> for output and input queue objects. Demonstrate all these functions and operators.

16. Define a class Stack_double that represents a stack of doubles by keeping its elements in a dynamically allocated array (with maximum capacity). Supply the "big three" memory management functions.  Use this class to demonstrate
(a) the difference between initialization
        Stack
_double s;
        Stack
_double t = s;
and assignment
        Stack
_double s;
        Stack
_double t;
        s = t;

(b) the fact that all constructed objects are automatically destroyed
(c) the fact that the copy constructor is invoked if an object is passed by value to a function
(d) the fact that the copy constructor is not invoked when a parameter is passed by reference
(e) the fact that the copy constructor is used to copy a return value to the caller.
Supply member functions push and pop that add and remove an element to and from a stack. Overload the + operator for joint two stacks with return value a new stack, produced by repeatedly removing an element from the second stack and add it to the first stack. Overload the stream operators << and >> for
Stack_double class. Demonstrate all these functions and operators.

17. Define a class Circle that stores the center and radius of a circle, by keeping the numbers in a dynamically allocated array of doubles.
Supply the "big three" memory management functions. Use this class to demonstrate
(a) the difference between initialization
       
Circle s;
       
Circle t = s;
and assignment operation
       
Circle s;
       
Circle t;
        s = t;

(b) the fact that all constructed objects are automatically destroyed
(c) the fact that the copy constructor is invoked if an object is passed by value to a function
(d) the fact that the copy constructor is not invoked when a parameter is passed by reference
(e) the fact that the copy constructor is used to copy a return value to the caller.
Supply a member functions that calculate the perimeter and the area of the circle. Overload the ++ operator (prefix and postfix forms) that add 1 to the radius of the circle and the > operator (with boolean return value) to compare two circles with respect to their areas. Overload the stream operators << and >>. Demonstrate all these functions and operators.

18. Define a class Quadratic_int that stores the coefficients of a quadratic polynomial in a dynamically allocated array of integers. Supply the "big three" memory management functions. Use this class to demonstrate
(a) the difference between initialization
        Quadratic
_int s;
        Quadratic
_int t = s;
and assignment operation
        Quadratic
_int s;
        Quadratic
_int t;
        s = t;
(b) the fact that all constructed objects are automatically destroyed
(c) the fact that the copy constructor is invoked if an object is passed by value to a function
(d) the fact that the copy constructor is not invoked when a parameter is passed by reference
(e) the fact that the copy constructor is used to copy a return value to the caller.
Supply a member function which calculates the value of a quadratic function for a given argument value. Overload + and - operators for addition and subtraction of two polynomials and the unary operator * which return true or false when the corresponding quadratic equation has or has not real roots. Overload the stream operators << and >>. Demonstrate all these functions and operators.

19. Define a class Vector_double that stores n-dimensional vector, by keeping its elements in a dynamically allocated array of doubles. Supply the "big three" memory management functions. Use this class to demonstrate
(a) the difference between initialization
        Vector
_double s;
        Vector
_double t = s;
and assignment operation
        Vector
_double s;
        Vector
_double t;
        s = t;
(b) the fact that all constructed objects are automatically destroyed
(c) the fact that the copy constructor is invoked if an object is passed by value to a function
(d) the fact that the copy constructor is not invoked when a parameter is passed by reference
(e) the fact that the copy constructor is used to copy a return value to the caller.
Supply a member function which calculates the Euclidean norm of a vector.
Overload + and - operators for addition and subtraction of two vectors and * for multiplying a vector with a double velue. Overload the stream operators << and >>. Demonstrate all these functions and operators.

20. Define a class Set_string that stores integers in a dynamically allocated array of strings. In a set, the order of elements does not matter, and every element can occur at most once.
Supply the "big three" memory management functions. Use this class to demonstrate
 (a) the difference between initialization
        Set
_string s;
        Set
_string t = s;
and assignment operation
        Set
_string s;
        Set
_string t;
        s = t;
(b) the fact that all constructed objects are automatically destroyed
(c) the fact that the copy constructor is invoked if an object is passed by value to a function
(d) the fact that the copy constructor is not invoked when a parameter is passed by reference
(e) the fact that the copy constructor is used to copy a return value to the caller.
Supply the add and remove member functions to add and remove set elements; size and contains member functions. Overload the << and >>. Demonstrate all these functions and operators.