Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
74
Добавлен:
10.12.2013
Размер:
44.03 Кб
Скачать

Министерство Образования Российской Федерации

Пермский Государственный Технический Университет

Кафедра ИТАС

Лабораторная работа № 5

ПЕРЕГРУЗКА ОПЕРАЦИЙ

Вариант №3

Выполнил: Студент

группы АСУ 04-2

Заколодкин К.А.

Проверил: Ноткин А.М.

Пермь 2005

Задание варианта № 3

  • Определить АТД  множество с элементами типа char. Реализовать в нем конструкторы, деструктор, функции Input (ввод с клавиатуры) и Print (вывод на экран), перегрузить операцию присваивания.

  • Дополнить определение класса перегруженными операциями:

-  удалить элемент из множества (типа set-char);

>  проверка на подмножество;

!=  проверка множеств на неравенство.

  • Реализовать эти операции.

Определение класса:

//Class.h

//--------------------------------------------------------------

#ifndef CLASS

#define CLASS 1

#include <iostream.h>

#include <string.h>

//--------------------------------------------------------------

class Mnozhestvo

{

char* beg;

int len;

int max_s;

public:

Mnozhestvo();

Mnozhestvo(int);

~Mnozhestvo();

void Print();

bool ToBe(char);

void Insert ();

Mnozhestvo& operator=(const Mnozhestvo& );

bool operator>(Mnozhestvo&);

void operator- (int);

void operator- (char);

bool operator != (Mnozhestvo&);

};

//--------------------------------------------------------------

#endif

Обоснование включения в класс нескольких конструкторов, деструктора и операции присваивания.

  • Два конструктора - для создания удобного нам объекта ( в зависимости от нужного кол-ва элементов – определенное или максимальное ).

  • Деструктор - для удаления динамической памяти.

  • Операция присваивания – для предотвращения копирования поля char* beg в побитовом копировании.

Реализация перегруженных операций

Mnozhestvo & Mnozhestvo::operator=(const Mnozhestvo& Obj)

{

if(this==&Obj) return *this;

delete[] beg;

len=Obj.len;

beg=new char [len];

strcpy(beg,Obj.beg);

return *this;

}

//--------------------------------------------------------------------

bool Mnozhestvo::operator>(Mnozhestvo& Obj)

{

int Len=0;

if(len<Obj.len) return false;

for(int i=0;i<len;i++)

{

if(ToBe(Obj.beg[i])) Len++;

}

if (Len==Obj.len) return true;

return false;

}

//--------------------------------------------------------------------

void operator -(Mnozhestvo& Obj , int n)

{

int i,j=0;

Obj.len-=1;

char* t=new char[Obj.len];

for(i=0;i<Obj.len+1;i++)

{

if(i!=(n-1))

{

t[j]=Obj.beg[i];

j++;

}

}

delete[] Obj.beg;

Obj.beg=t;

}

//--------------------------------------------------------------------

void operator -(Mnozhestvo& Obj, char c)

{

c=ToRus(c);

if(!Obj.ToBe(c))

Rus(" Такого элемента нет ! \n");

else

{

int i,j=0;

Obj.len-=1;

char* t=new char[Obj.len];

for(i=0;i<Obj.len+1;i++)

{

if(Obj.beg[i]!=c)

{

t[j]=Obj.beg[i];

j++;

}

}

delete[] Obj.beg;

Obj.beg=t;

}

}

//--------------------------------------------------------------------

bool operator != (Mnozhestvo& Obj1,Mnozhestvo& Obj2)

{

if(Obj1.GetLen()!=Obj2.GetLen()) return true;

if(strcmp(Obj1.GetBeg(),Obj2.GetBeg())==0) return false;

return true;

}

//--------------------------------------------------------------------

Функция Main ()

#include "Class.h"

void Rus(char*);

void main()

{

Mnozhestvo A(2),B(2),C(3);

A.Insert();// ц,у

B.Insert();// к,ц

C.Insert();// у,к,ц

A=C;

if(A>B) Rus("Подмножество найдено! \n");

A-'ц';// удаляет элемент ц

A-2; // удаляет элемент №2

A.Print();

if(A!=B) C.Print();

}

Результат работы

Введите 2 символа

ц

у

Введите 2 символа

к

ц

Введите 3 символа

у

ц

к

Подмножество найдено!

Множество :

у

Множество :

у

ц

к

Press any key to continue

Соседние файлы в папке Lab_5v3