Description
Educational Objectives. After successfully completing this = assignment,=20 the student should be able to accomplish the following:
-
Design a class based on non-language-specific specifications=20
-
Implement a class of your own design=20
-
Implement constructors, copy constructor, destructor, and = assignment=20 operator for a class that has resource allocation requirements=20
-
Global operators for a class=20
-
Correctly separate class definition and implementation using files =
-
Create executables of class client programs using makefiles and = the Make=20 utility=20
-
Test a class using specs and an existing test platform=20
-
Use fsu::BitVector in designing set classes
Operational Objectives: Define and implement the = class=20 UIntSet and deliver the code in two files uintset.h = and=20 uintset.cpp along with a makefile for the supplied test = harness.
Deliverables: uintset.h, = uintset.cpp,=20 makefile
Background
See lecture notes
Procedural Requirements:
-
Design the class UIntSet
-
Implement the class UIntSet with the class definition in file=20 uintset.h and the class implementation in file=20 uintset.cpp
-
Thoroughly test class UIntSet, starting out with the supplied test = harness=20 in file hw4/test.cpp using command line compile
-
Write a makefile that builds test.x with the “in lieu of = makefile”=20 include statement commented out or removed
-
Test the executable again, and refine your work to withstand = testing.
-
Turn in uintset.h, uintset.cpp, and = makefile=20 using the hw4submit.sh submit script.
Warning: Submit scripts do not work on the = program and=20 linprog servers. Use shell.cs.fsu.edu to submit = projects. If=20 you do not receive the second confirmation with the contents of your = project,=20 there has been a malfunction.
Technical Requirements and Specifications
-
The class should implement the following diagram:=20
Class Name:
UIntSet
Services :
void Insert ( unsigned long n ) // = inserts n into set void Remove ( unsigned long n ) // removes n from set void Clear () // makes set empty bool Member ( unsigned long n ) const // returns true iff n = is in set bool Empty () const; // true iff set is empty size_t Size () const; // returns number of elements in set size_t Range () const; // returns upper bound of = range/universe [0,ub) UIntSet& operator =3D (const UIntSet& s); // set =3D s = (assignment operator) UIntSet& operator +=3D (const UIntSet& s); // set =3D set = union s UIntSet& operator *=3D (const UIntSet& s); // set =3D set = intersection s UIntSet& operator -=3D (const UIntSet& s); // set =3D set = difference s
Properties :
Constructable: objects can be declared as ordinary = variables, max size may be specified Assignable: objects can be assigned one to another Passable: objects can be passed by value to and returned as = values from functions
Private variables:
size_t size_; // the size of the current set fsu::BitVector bv_; // bit vector representing set
Global operators:
UIntSet operator + (const UIntSet& s1, const = UIntSet& s2); // returns s1 union s2 UIntSet operator * (const UIntSet& s1, const UIntSet& s2); // = returns s1 intersection s2=20 UIntSet operator - (const UIntSet& s1, const UIntSet& s2); // = returns s1 difference s2 std::ostream& operator << (std::ostream& os, const = UIntSet& s); // output operator
-
The class should be a proper type, to include default and = 1-argument=20 constructor, copy constructor, assignment operator, and destructor. = The=20 constructor argument sets the maximum size of unsigned integers that = can=20 belong to the set. Default maximum element size is 64.
-
The output operator operator<< should be overloaded = for the=20 type UIntSet. Output should be “{ 0 6 12 18 }” for = the set=20 containing elements 0, 6, 12, 18.
-
Global binary operators operator+, operator*,=20 operator- should be overloaded for the type UIntSet. = The=20 syntax and semantics of these operators are as follows:
UIntSet(200) s1, s2, s3; // three empty sets with = range [0,1,2,...,200) s2.Insert(2); s2.Insert(3); s2.Insert(4); s3.Insert(2); s3.Insert(4); s3.Insert(6); std::cout << s2; // prints { 2 3 4 } s1 =3D s2 + s3; // s1 is the set union of s2 and s3 std::cout << s1; // prints { 2 3 4 6 } s1 =3D s2 * s3; // s1 is the set intersection of s2 and s3 std::cout << s1; // prints { 2 4 } s1 =3D s2 - s3; // s1 is the set difference of s2 and s3 std::cout << s1; // prints { 3 }
-
UIntSet should pass testing with the supplied hw4/test.cpp = with no=20 compile or runtime errors and no compiler warnings when the warning = flags=20 -W, -Wall, -Wextra are set.
-
Building and running the supplied hw4/test.cpp should = result in=20 output identical to the supplied executable = area51/settest_?.x [? =3D=20 i or s] .