ПРИЛОЖЕНИЕ


// 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 <iostream.h>

#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()));

}

Загрузка...