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

Конструкторы и деструкторы

класса

Person pers1 = new Person(), pers2 = new Person(); Person pers3= new Person("Петрова");

static Person()

{

Console.WriteLine("Выполняется статический конструктор!");

}

~Person()

{

//Код деструктора

}

03. C#. ООП. Классы

12

Пример проектирования

класса/// <summary> Класс Rational определяет новый тип данных -

///рациональные числа и основные операции над ними - сложение,

///умножение, вычитание и деление. Рациональное число задается

///парой целых чисел (m,n) и изображается обычно в виде дроби m/n.

///Число m называется числителем,n - знаменателем. Для

///каждого рационального числа существует множество его

///представлений, например, 1/2, 2/4, 3/6, 6/12 - задают

///одно и тоже рациональное число. Среди всех представлений

///можно выделить то, в котором числитель и знаменатель

///взаимно несократимы. Такой представитель будет храниться

///в полях класса. Операции над рациональными числами

///определяются естественным для математики образом

///</summary>

public class Rational

{

// Описание тела класса Rational }//Rational

03. C#. ООП. Классы

13

Конструкторы класса Rational

///<summary> Конструктор класса. Создает рациональное число

///m/n, эквивалентное a/b, но со взаимно несократимыми

///числителем и знаменателем. Если b=0, то результатом

///является рациональное число 0 -пара (0,1). </summary>

///<param name="a">числитель</param>

///<param name="b">знаменатель</param>

public Rational(int a, int b)

{

if(b==0) {m=0; n=1;} else

{

//приведение знака

if( b<0) {b=-b; a=-a;} //приведение к несократимой дроби int d = nod(a,b);

m=a/d; n=b/d;

}

}

03. C#. ООП. Классы

14

Методы класса Rational

///<summary>

///Закрытый метод класса.

///Возвращает наибольший общий делитель чисел a,b

///</summary>

///<param name="a">первое число</param>

///<param name="b">второе число, положительное</param>

///<returns>НОД(a,b)</returns>

int nod(int m, int n)

{

int p=0;

m=Math.Abs(m); n =Math.Abs(n); if(n>m){p=m; m=n; n=p;}

do

{

p = m%n; m=n; n=p; }while (n!=0); return(m);

}//nod

03. C#. ООП. Классы

15

Печать рациональных чисел

public void PrintRational(string name)

{

Console.WriteLine(" {0} = {1}/{2}",name,m,n);

}

03. C#. ООП. Классы

16

Тестирование создания рациональных чисел

public void TestCreateRational()

{

Rational r1=new Rational(0,0), r2 = new Rational(1,1); Rational r3=new Rational(10,8), r4 = new Rational(2,6); Rational r5=new Rational(4,-12), r6 = new Rational (-12,-14); r1.PrintRational("r1:(0,0)");

r2.PrintRational("r2:(1,1)");

r3.PrintRational("r3:(10,8)");

r4.PrintRational("r4:(2,6)"); r5.PrintRational("r5: (4,-12)"); r6.PrintRational("r6: (-12,-14)");

}

03. C#. ООП. Классы

17

Операции над рациональными числами. Сложение

public Rational Plus(Rational a)

{

int u,v;

u = m*a.n +n*a.m; v= n*a.n; return( new Rational(u, v));

}//Plus

public static Rational operator +(Rational r1, Rational r2)

{

return (r1.Plus(r2));

}

03. C#. ООП. Классы

18

Операции над рациональными числами. Сложение

public void TestPlusRational()

{

Rational r1=new Rational(0,0), r2 = new Rational(1,1); Rational r3=new Rational(10,8), r4 = new Rational(2,6); Rational r5=new Rational(4,-12), r6 = new Rational(-12,-14); Rational r7,r8, r9,r10, r11, r12;

r7 = r1.Plus(r2); r8 = r3.Plus(r4); r9 = r5.Plus(r6);

r10 = r1+r2; r11 = r3+r4; r12 = r5+r6+r10+r11; r1.PrintRational("r1:(0,0)"); r2.PrintRational("r2:(1,1)"); r3.PrintRational("r3:(10,8)"); r4.PrintRational("r4:(2,6)"); r5.PrintRational("r5: (4,-12)"); r6.PrintRational

("r6: (-12,-14)");

r7.PrintRational("r7: (r1+r2)"); r8.PrintRational ("r8: (r3+r4)");

r9.PrintRational("r9: (r5+r6)"); r10.PrintRational ("r10: (r1+r2)");

r11.PrintRational("r11: (r3+r4)"); r12.PrintRational("r12: (r5+r6+r10+r11)");

}

03. C#. ООП. Классы

19

Операции над рациональными числами. Вычитание

public Rational Minus(Rational a)

{

int u,v;

u = m*a.n - n*a.m; v= n*a.n; return( new Rational(u, v));

}//Minus

public static Rational operator -(Rational r1, Rational r2)

{

return (r1.Minus(r2));

}

03. C#. ООП. Классы

20

Операции над рациональными числами. Умножение

public Rational Mult(Rational a)

{

int u,v;

u = m*a.m; v= n*a.n; return( new Rational(u, v));

}//Mult

public static Rational operator *(Rational r1, Rational r2)

{

return (r1.Mult(r2));

}

03. C#. ООП. Классы

21