const int MAXSIZE = 100; // exception classes class DuplicateExc {}; class FullExc {}; class NotFoundExc {}; class IntSet { public: IntSet(); void add(int); void remove(int); int isMember(int) const; int size() const; protected: int findPos(int) const; int s[MAXSIZE]; int curSize; };IntSet.cc
IntSet::IntSet() { curSize = 0; } void IntSet::add(int x) { if (findPos(x) >= 0) { throw DuplicateExc(); } else if (curSize == MAXSIZE) { throw FullExc(); } s[curSize++] = x; } void IntSet::remove(int x) { int i,pos; if ((pos = findPos(x)) == -1) { throw NotFoundExc(); } else { for (i = pos; i < curSize-1; i++) s[i] = s[i+1]; curSize--; } } int IntSet::isMember(int x) const { return(findPos(x) >= 0); } int IntSet::size() const { return(curSize); } int IntSet::findPos(int x) const { int pos,i; pos = -1; for (i = 0; i < curSize; i++) if (s[i] == x) { pos = i; break; } return(pos); }driver.cc
#include#include "IntSet.h" int main() { int i,j; IntSet s; for (i = 1; i <= 100; i++) s.add(i); for (i = 1; i <= 100; i++) for (j = 2; j < i; j++) if (i%j == 0) { s.remove(i); break; } for (i = 1; i <= 100; i++) if (s.isMember(i)) cout << i << " "; cout << endl; }
Answer: 1 2 3 5 7 11 13 17 19 23 etc. (prime #s up to 100)
2) Write a method to re-define the * operator for IntSet:
IntSet& operator*(const IntSet& src1,const IntSet& src2) { }which returns a new IntSet object containing the
IntSet& IntSet::operator*(const IntSet& src1,const IntSet& src2) { IntSet* temp; for (int i = 0; i < src1.size(); i++) if (src2.isMemebr(src1.s[i])) temp->add(src1.s[i]); return(*temp); }