Основы программирования на C#

         

Конструкторы класса 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; } }

Как видите, конструктор класса может быть довольно сложным.

В нем, как в нашем случае, может проверяться корректность задаваемых аргументов. Для рациональных чисел мы полагаем, что задание нулевого знаменателя означает задание рационального числа 0, и это эквивалентно заданию пары (0, 1). В остальных случаях выполняется приведение заданной пары чисел к эквивалентному рациональному числу с несократимыми числителем и знаменателем. По ходу дела вызывается закрытый метод класса, вычисляющий значение НОД(a,b) - наибольшего общего делителя чисел a и b.



Содержание раздела