Слайд 8Пример работы с полями
public void TestPersonProps()
{
Person pers1 = new Person();
pers1.Fam
= "Петров";
pers1.Age = 21;
pers1.Salary = 1000;
Console.WriteLine ("Фам={0}, возраст={1}, статус={2}",
pers1.Fam, pers1.Age,
pers1.Status);
pers1.Fam = "Иванов"; pers1.Age += 1;
Console.WriteLine ("Фам={0}, возраст={1}, статус={2}",
pers1.Fam, pers1.Age, pers1.Status);
}//TestPersonProps
Слайд 10Индексаторы
public void TestPersonChildren()
{
Person pers1 = new Person(), pers2 = new
Person();
pers1.Fam = "Петров"; pers1.Age = 42;
pers1.Salary = 10000;
pers1[pers1.Count_children] = pers2;
pers2.Fam
="Петров"; pers2.Age = 21; pers2.Salary = 1000;
Person pers3= new Person("Петрова");
pers1[pers1.Count_children] = pers3;
pers3.Fam ="Петрова"; pers3.Age = 5;
Console.WriteLine ("Фам={0}, возраст={1}, статус={2}",
pers1.Fam, pers1.Age, pers1.Status);
Console.WriteLine ("Сын={0}, возраст={1}, статус={2}",
pers1[0].Fam, pers1[0].Age, pers1[0].Status);
Console.WriteLine ("Дочь={0}, возраст={1}, статус={2}",
pers1[1].Fam, pers1[1].Age, pers1[1].Status);
}
Слайд 12Конструкторы и деструкторы класса
Person pers1 = new Person(), pers2 =
new Person();
Person pers3= new Person("Петрова");
static Person()
{
Console.WriteLine("Выполняется статический конструктор!");
}
~Person()
{
//Код деструктора
}
Слайд 13Пример проектирования класса
/// Класс Rational определяет новый тип данных
-
/// рациональные числа и основные операции над ними - сложение,
/// умножение, вычитание и деление. Рациональное число задается
/// парой целых чисел (m,n) и изображается обычно в виде дроби m/n.
/// Число m называется числителем,n - знаменателем. Для
/// каждого рационального числа существует множество его
/// представлений, например, 1/2, 2/4, 3/6, 6/12 - задают
/// одно и тоже рациональное число. Среди всех представлений
/// можно выделить то, в котором числитель и знаменатель
/// взаимно несократимы. Такой представитель будет храниться
/// в полях класса. Операции над рациональными числами
/// определяются естественным для математики образом
///
public class Rational
{
// Описание тела класса Rational
}//Rational
Слайд 14Конструкторы класса Rational
/// Конструктор класса. Создает рациональное число
/// m/n,
эквивалентное a/b, но со взаимно несократимыми
/// числителем и знаменателем. Если
b=0, то результатом
/// является рациональное число 0 -пара (0,1).
///
числитель
///
знаменатель
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;
}
}
Слайд 15Методы класса Rational
///
/// Закрытый метод класса.
/// Возвращает наибольший общий
делитель чисел a,b
///
/// первое число
/// второе число,
положительное
/// НОД(a,b)
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
Слайд 16Печать рациональных чисел
public void PrintRational(string name)
{
Console.WriteLine(" {0} = {1}/{2}",name,m,n);
}
Слайд 17Тестирование создания рациональных чисел
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)");
}
Слайд 18Операции над рациональными числами. Сложение
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));
}
Слайд 19Операции над рациональными числами. Сложение
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)");
}
Слайд 20Операции над рациональными числами. Вычитание
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));
}
Слайд 21Операции над рациональными числами. Умножение
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));
}
Слайд 22Операции над рациональными числами. Деление
public Rational Divide(Rational a)
{
int u,v;
u =
m*a.n; v= n*a.m;
return( new Rational(u, v));
}//Divide
public static Rational operator /(Rational
r1, Rational r2)
{
return (r1.Divide(r2));
}
Слайд 23Пример применения
public void TestOperRational()
{
Rational r1=new Rational(1,2), r2 = new Rational(1,3);
Rational
r3, r4, r5, r6 ;
r3 = r1- r2; r4 =
r1*r2; r5 = r1/r2; r6 = r3+r4*r5;
r1.PrintRational("r1: (1,2)"); r2.PrintRational("r2: (1,3)");
r3.PrintRational("r3: (r1-r2)"); r4.PrintRational("r4: (r1*r2)");
r5.PrintRational("r5: (r1/r2)");
r6.PrintRational("r6: (r3+r4*r5)");
}