Студопедия

КАТЕГОРИИ:

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


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




class TComplex

{

private:

double FRe;

double FIm;

public:

double Re(){return FRe;};

double Im(){return FIm;};

double Module();

double Angle();

TComplex(double Re, double Im);

TComplex operator +=(TComplex Comlex);

TComplex operator -=(TComplex Comlex);

TComplex operator *=(TComplex Comlex);

TComplex operator /=(TComplex Comlex);

};

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

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

#define ERationalError Exception

#define EZiroDivide ERationalError

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

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

TComplex::TComplex(double Re, double Im)

{

FRe = Re;

FIm = Im;

}

 

TComplex TComplex::operator +=(TComplex Complex)

{

FRe += Complex.FRe;

FIm += Complex.FIm;

return *this;

}

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

TComplex TComplex::operator /=(TComplex Complex)

{

if ((Complex.FRe == 0) || (Complex.FIm == 0))

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

double NewRe;

NewRe = (FRe*Complex.FRe + FIm*Complex.FIm)/

(pow(Complex.FRe,2) + pow(Complex.FIm,2));

FIm = (FIm*Complex.FRe - FRe*Complex.FIm)/

(pow(Complex.FRe,2) + pow(Complex.FIm,2));

FRe = NewRe;

return *this;

}

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

TComplex a(1,2), b(3,4);

a += b;

Edit3->Text = a.Re();

Edit4->Text = a.Im();

}

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

 

TComplex::TComplex()

{

FRe = 0;

FIm = 0;

}

 

TComplex TComplex::operator+(TComplex Complex)

{

TComplex Result(FRe,FIm);

Result+=Complex;

return Result;

}

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

TComplex TComplex::operator/(TComplex Complex)

{

TComplex Result(FRe,FIm);

Result/=Complex;

return Result;

}

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

TComplex();

TComplex(AnsiString Comlex);

TComplex operator +(TComplex Comlex);

TComplex operator -(TComplex Comlex);

TComplex operator *(TComplex Comlex);

TComplex operator /(TComplex Comlex);

Для более эффективного ввода комплексных чисел в классе TComplex можно предусмотреть дополнительный конструктор так, чтобы исходное число передавалось ему в виде строки AnsiString в формате ‘Действительная часть + i Мнимая часть’.

TComplex::TComplex(AnsiString Complex)

{

int Separator, Sign, Index;

bool ImBool;

Complex = Complex.Trim(); Separator = 0;

Sign = 1; Index = Complex.Length(); ImBool = false;

while ((Index != 0)&&(Separator == 0))

{

switch (Complex[Index]){

case 'i': ImBool = true;

Complex[Index] = ' ';

break;

case '+': Separator = Index;

break;

case '-': Sign = -1;

Separator = Index;

}

Index--;

}

if (ImBool)

{

if (Index == 0) FRe = 0;

elseFRe=Complex.SubString(1, Separator-1).ToDouble();

if (Complex.SubString(Separator + 1, Complex.Length()

- Separator).Trim() =="")

FIm = Sign;

else FIm = Sign*Complex.SubString(Separator + 1,

Complex.Length() - Separator).ToDouble();

}

Else

{

FRe = Complex.ToDouble();

FIm = 0;

}

}

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

AnsiString TComplex::ToStr()

{

AnsiString Result;

if (FIm > 0) Result = "+i" + FloatToStr(FIm);

else if (FIm < 0) Result = "-i" + FloatToStr(-FIm);

if (FRe != 0) Result = FloatToStr(FRe) + Result;

else if (FIm = 0) Result = "0";

return Result;

}

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

TComplex(AnsiString Complex);

AnsiString ToStr();

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

void __fastcall TForm1:: Button1Click(TObject *Sender)

{

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

c=a+b;

Edit3->Text = c.ToStr();

}


Поделиться:

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





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