Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Синтаксис объявления класса TRational




class TRational

{

private:

int FNum;

int FDen;

public:

int Num(){return FNum;};

int Den(){return FDen;};

TRational(int Num, int Den = 1);

TRational operator +=(TRational Rat);

TRational operator -=(TRational Rat);

TRational operator *=(TRational Rat);

TRational operator /=(TRational Rat);

};

 

Класс TRational содержит два поля для хранения значений числителя и знаменателя числа, два метода для их вывода, конструктор для ввода их значений и четыре метода для выполнения арифметических операций с рациональными числами.

В модуле с данным классом можно определить два класса исключительных ситуаций ERationalError и EZiroDivide для обработки ошибок, которые могут возникать при работе с рациональными числами.

#define ERationalError Exception

#define EZiroDivide ERationalError

Чтобы использовать эти классы, в исполняемом разделе модуля с расширением cpp необходимо подключить модуль SysUtils.hpp, в котором хранить базовый класс исключительных ситуаций Exception.

После объявления класса TRational необходимо определить все его методы в исполняемом разделе модуля с расширением cpp в соответствии с ADT – форматом.

TRational::TRational(int Num, int Den)

{

if (Den==0)

throw ERationalError("Знаменатель равен нулю");

FNum = Num;

FDen = Den;

}

 

TRational TRational::operator +=(TRational Rat)

{

FNum = FNum*Rat.FDen + FDen*Rat.FNum;

FDen = FDen*Rat.FDen;

return *this;

}

....................................................................................................................................................

TRational TRational::operator /=(TRational Rat)

{

if (Rat.FNum == 0)

throw EZiroDivide("Деление на ноль");

FNum = FNum*Rat.FDen;

FDen = FDen*Rat.FNum;

return *this;

}

После того, как определен класс TRational, его можно использовать в любом месте программы, подключив соответствующий модуль.

void __fastcall TForm1::Button1Click(TObject *Sender)

{

TRational a(1,2), b(3);

a += b;

Edit3->Text = a.Num();

Edit4->Text = a.Den();

}

Из примера видно, что реализация класса TRational далека от совершенства. Для расширения его функциональных возможностей можно добавить к нему дополнительные методы так, чтобы исходное число не передавалось конструктору, а методы арифметических операций выполняли бы действия без присвоения.

TRational::TRational()

{

FNum = 0;

FDen = 1;

}

TRational TRational::operator+(TRational Rat)

{

TRational Result(FNum,FDen);

Result+=Rat;

return Result;

}

....................................................................................................................................................

TRational TRational::operator/(TRational Rat)

{

TRational Result(FNum,FDen);

Result/=Rat;

return Result;

}

Заголовки этих методов, первоначально, необходимо поместить в объявление класса TRational.

TRational();

TRational operator +(TRational Rat);

TRational operator -(TRational Rat);

TRational operator *(TRational Rat);

TRational operator /(TRational Rat);

Для более эффективного ввода рациональных чисел в классе TRational можно предусмотреть дополнительный конструктор так, чтобы исходное число передавалось ему в виде строки AnsiString в формате ‘Числитель / Знаменатель’.

TRational::TRational(AnsiString Rat)

{

int Separator;

Separator = Rat.Pos('/');

if (Separator == 0)

{

FNum = Rat.ToInt();

FDen = 1;

}

Else

{

FNum = Rat.SubString(1,Separator -1).ToInt();

FDen = Rat.SubString(Separator + 1, Rat.Length()-Separator).ToInt();

};

if (FDen == 0)

throw ERationalError("Знаменатель равен нулю");

}

Для более эффективного вывода рациональных чисел можно предусмотреть специальный метод преобразования типов из TRational в строку AnsiString, реализация которого имеет следующий вид:

AnsiString TRational::ToStr()

{

return IntToStr(FNum) + '/' + IntToStr(FDen);

}

Перед определением дополнительного конструктора и метода преобразования типов их заголовки необходимо объявить внутри класса TRational, первоначально подключив модуль System.hpp, в котором храниться объявление класса строк AnsiString.

TRational(AnsiString Rat);

AnsiString ToStr();

Использовать дополнительные методы можно следующим образом:

void __fastcall TForm1:: Button1Click(TObject *Sender)

{

TRational a(Edit1->Text), b(Edit2->Text), c;

c=a+b;

Edit3->Text = c.ToStr();

}


Поделиться:

Дата добавления: 2015-08-05; просмотров: 59; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты