Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие СS_Шульга.doc
Скачиваний:
48
Добавлен:
12.02.2015
Размер:
703.49 Кб
Скачать

Int m, n;// числитель и знаменатель

public Rational(int a, int b)

{

if (b == 0) throw new Exception("Не возможно создать рациональное число с знаменателем 0");

m = a; n = b;

}

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

{

int u, v;

u = r1.m * r2.n + r1.n * r2.m; v = r1.n * r2.n;

return (new Rational(u, v));

}

public void output()

{

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

}

}

Для тестирования операции сложения напишем следующий фрагмент кода

Rational a = new Rational(1, 2);

Rational b = new Rational(1, 4);

(a + b).output();

На экран будет выведено 6/8.

Операции преобразования типаобеспечивают возможность явного и неявного преобразования между пользовательскими типами данных. Синтаксис объявителя операции преобразования типа:

publicstaticimplicitoperatorтип ( параметр ) // неявное преобразование

publicstatic explicit operator тип ( параметр ) // явное преобразование

Эти операции выполняют преобразование из типа параметра в тип, указанный в заголовке операции. Одним из этих типов должен быть класс, для которого определяется операция. Таким образом, операции выполняют преобразование либо типа класса к другому типу, либо наоборот. Преобразуемые типы не должны быть связаны отношениями наследования.

Явное преобразование типа выполняется при использовании операции приведения типа в программе, как в примере.

Неявное преобразование выполняется автоматически:

  • при присваивании объекта переменной указанного в операции типа (или наоборот);

  • при использовании объекта в выражении, содержащем переменные указанного в операции типа (или наоборот);

  • при передаче объекта в метод на место параметра указанного в операции типа (или наоборот);

  • при явном приведении типа.

Неявное преобразование следует определять так, чтобы при его выполнении не возникала потеря точности и не генерировались исключения. Если эти ситуации возможны, преобразование следует описать как явное.

Для одного и того же преобразования нельзя определить одновременно явную и неявную операцию преобразования типа.

Пример решения задачи

В задаче необходимо описать класс с СТУДЕНТ (поля: ФАМИЛИЯ, СПЕЦИАЛЬНОСТЬ, ПОЛ (задается из фиксированного списка), ГОД ОБУЧЕНИЯ).

. В классе должен быть описаны как минимум:

  • соответствующие поля,

  • конструкторы (не менее трех),

  • свойства для получения и изменения значений

  • метод ввода объекта с клавиатуры

  • метод вывода объекта на экран

  • операция преобразования типа.

Кроме того в классе должны быть описаны :

  • операция класса: перевод студента на следующий курс (+)

  • статический метод класса: поиск студента с заданной фамилией в массиве студентов.

методы и операции, соответствующие варианту задания.

Методы класса должны генерировать исключения.

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

  • начальное формирование массива из N20 объектов класса (ввод с клавиатуры или из заданного массива);

  • добавления объекта в массив;

  • вывод массива объектов на экран;

  • функции, демонстрирующие работу методов и операций, описанных в варианте задания.

  • дополнительная функция: вывод всех студентов с заданной специальностью.

Опишем поэтапное решение данной задачи.

Этап 1.

Для решения данной задачи опишем класс CStudent c указанными полями и тремя конструкторами. Для проверки работы конструкторов сразу определим метод, выводящий на экран все поля.

namespace ConsoleApplication1

{

enum gender_type { male, female, unknown };

class CStudent

{

//**************Поля класса CStudent*******************

static public int n = 0;

string name;

string speciality;

gender_type gender;