КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Рекомендации к выполнению1. Тип данных реализовать, используя классы C++Builder и шаблон. 2. Реализуйте множество, используя класс TSet, параметризуя его с помощью шаблона. Описание реализации в виде диаграммы классов UML и описание класса TSet представлено ниже: //-----------------файл UMain.cpp------------------------------------ #include <vcl.h> #pragma hdrstop #include <stdarg.h> #include "USet.h" //---------------------------------------------------------------------------
#pragma argsused //--------------------------------------------------------------------------- int main(int argc, char* argv[]) { int i = 0; TSet<int>* A = new TSet<int>(); TSet<int>* B = new TSet<int>(); (*A)<< 1;//{1} *B << 1; *B << 2;//{1, 2,} TSet<int>* C = (*A) + (*B);//{1, 2,} cout << "{1, 2,}: " << *C << endl; TSet<int>* D = (*A) - (*B);//{} cout << "{}: " << *D << endl; TSet<int>* E = (*B) - (*A);//{2,} cout << "{2,}: " << *E << endl; TSet<int>* G = (*B) * (*A);//{1,} cout << "{1,}: " << *G << endl; for(int i = 0; i < 5; i++) *A << i + 1; cout << "{1,2,3,4,5}: " << *A << endl; cin >> i; return 0; } //------------------------------------------------------------------- //--------файл USet.cpp---------------------------------------------- #include <vcl.h> #include <math.h> #include <iostream.h>
#ifndef USetH #define USetH //------------------------------------------------------------------- #endif //------------------------------------------------------------------- template<class T> class TSet : public TList { bool InSetInd(T a, int& j) const; String GetSet(void) const; int GetMembers(void) const {return Count;}; T GetItem(int i) const {return*( static_cast<T*>(Items[i]));}; public: TSet();//Конструктор TSet(const TSet<T>& P);//Копирующий конструктор virtual __fastcall ~TSet(void);//Деструктор void AddItem(T a);//Добавить элемент в множество void RemItem(T a);//Удалить элемент из множества bool IsEmpty(void); //Множество пусто bool InSet(T a) const; void Empty(void); TSet<T>* operator + (const TSet<T>& P);//Сложение множеств TSet<T>* operator - (const TSet<T>& P);//Вычитание множеств TSet<T>* operator * (const TSet<T>& P);//Умножение множеств TSet<T>& operator << (const T& m); T operator [] (int i);//Одночлен по индексу bool operator == (const TSet<T>& P);//Сравнение двух множеств friend ostream& operator << (ostream & , const TSet<T>& S); __property String Set = {read = GetSet};//Чтение множества в формате строки __property T Member[int index] = {read = GetItem}; __property int Members = {read = GetMembers}; }; //------------------------------------------------------------------- template<class T> bool TSet<T>::InSetInd(T a, int& j) const //проверяет присутствие элемента а во множестве { int i; bool R = False; for (int i = 0; i < Count;i++) if (Member[i]== a) { R = True; j = i; break; } return R; } //------------------------------------------------------------------- template <class T> ostream& operator << (ostream& stream, TSet<T>& S) { stream << "{"; if(!S.IsEmpty()) { for(int i = 0; i < S.Members; i++) cout << S.Member[i] << ", "; } return stream << "}"; }
Для обработки объектов с помощью множества TSet, пользователю необходимо будет вместо идентификатора T подставить тип его объектов. 3. Для реализации множества опишите класс (тип TSet), наследующий от класса Tlist. 4. Типы данных реализуйте в отдельном модуле USET.
|