ПРИЛОЖЕНИЕ


// Set.h Объявление класса TSet
#ifndef SET_H
#define SET_H //Предотвращает несколько include
class TElem;
typedef TElem* PTElem;
typedef PTElem* PPTElem;

class TSet;
typedef TSet* PTSet;

class TSet {
private:
int max;
int index; //индекс массива множества
PPTElem set; //Указатель на массив указателей на PTElem
protected:
virtual int CompareElem(PTElem p1, PTElem p2) = 0;
public:
TSet(int n)
{ max=n; index=0; set=new PTElem[n]; }
virtual ~TSet() { delete[] set; }
void AddElem(PTElem p);
int HasElem(PTElem p);
};
#endif //SET_H

// Set.cpp Реализация класса TSet #include <stdlib.h> #include «set.h» // Добавляет элемент в множество void TSet::AddElem(PTElem p)
{
if (set == NULL) {
cout << endl << «ERROR: Out of memory»;
exit(1);
}
if (index>= max) {
cout << endl << «ERROR: Set limit exceeded»;
exit(1);
}
set[index] = p;
++index;
}
//Возвращает истину, если элемент, адресуемый р, находится в множстве
int TSet::HasElem(PTElem p)
{
if (set == NULL)
return 0; //В пустом множестве нет элементов
for( int i=0; i<index; i++)

if(CompareElem(p,set[i])==0)
return 1;
return 0;
}

// TSet.cpp Тестирование класса TSet
#include <iostream.h>
#include <string.h>
#include «set.h»
class TElem {
private:
char *sp; //Указатель на элемент-строку
public:
TElem(const char *s) {sp = strdup(s);}
virtual ~TElem() {delete sp;}
virtual const char *GetString(void) {return sp;}
};
class TMySet: public TSet {
protected:
virtual int CompareElem(PTElem p1, PTElem p2);
public:
TMySet(int n): TSet(n) {}
};
void Test(const char *s, PTSet setp);
void main()
{
TMySet array(10); //Множество из 10 объектов TElem
array.AddElem(new TElem(«Sep»));
array.AddElem(new TElem(«Apr»));
array.AddElem(new TElem(«Jun»));
array.AddElem(new TElem(«Nov»));
Test(«Jun»,&array);
Test(«Feb»,&array);
Test(«Sep»,&array);
Test(«Nov»,&array);
Test(«Apr»,&array);
Test(«Jul»,&array);
}
//Сообщает, принадлежит ли строка s множеству setp
void Test(const char *s, PTSet setp)
{
TElem testElem(s);
if (setp->HasElem(&testElem))
cout << s << » is in the set » << endl;
else
cout << s << » is not in the set » << endl;
}
// Возвращает 0, если два элемента идентичны, иначе не нуль
int TMySet::CompareElem(PTElem p1, PTElem p2)
{
return (strcmp(p1->GetString(), p2->GetString()));

Загрузка...