Конструкторы

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

Создание объекта является основной задачей конструктора.

Присваивание элементам данных объекта некоторых значений может осуществляться различными способами.

В зависимости от способа определения значений элементов данных объекта различают:

– конструкторы с умолчанием;

– конструкторы с заданием параметров;

– множественные конструкторы.

Конструктор с умолчанием вызывается в программе, без каких либо параметров. Например,

treyg t1 = new treyg();

Это означает, что элементам данных объектаt1 присваиваются некоторые фиксированные значения – обычно нулевые.

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

Например, в наш класс можно добавить конструктор с умолчанием, который присваивает (по умолчанию) сторонам треугольника фиксированные значения 3, 4 и 5. В этом можно убедиться, если добавить метод печати периметра объекта:

public treyg()

{

a = 3; b = 4; c = 5;

}

public void printO()

{

p = a + b + c;

ss = "Периметр треугольника = " + p.ToString();

}

Рисунок 8.1 – Использование в программе конструктора с фиксированными начальными значениями

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

public treyg(int sa, int sb, int sc)

{

a = sa; b = sb; c = sc;

}

Многие программисты включают в реализацию конструктора проверку на допустимые значения элементов данных объектов, создавая так называемые «умные» конструкторы. Например, в реализацию конструктора класса треугольник, можно включить следующие проверки элементов данных:

– все стороны треугольника данных должны быть больше 0;

– сумма любых двух сторон треугольника должна быть больше третьей стороны.

Если условия не выполняются необходимо выдать сообщение и присвоить элементам данных объекта некоторые фиксированные значения или повторить ввод.

Объявление такого «умного» конструктора ни чем не отличается от объявления обычного конструктора, а реализация включает все необходимые проверки в функции ввода данных класса, например:

public treyg(int sa, int sb, int sc)

{

vvod(sa,sb,sc);

}

Изменим код программы нашего обработчика события следующим образом – умышленно введем в конструкторе неправильные значения сторон треугольника:

private void button1_Click(object sender, EventArgs e)

{

int A, B, C;

treyg t = new treyg(3,5,9);

t.printO();

A = Convert.ToInt32(textBox1.Text);

B = Convert.ToInt32(textBox2.Text);

C = Convert.ToInt32(textBox3.Text);

t.vvod(A,B,C);

textBox4.Text = t.ss;

}

Работа программы на рисунке 8.2

Рисунок 8.2 – Работа программы с заведомо неправильными значениями в конструкторе

Множественные конструкторы используют перегрузку функций при обработке аргументов разного типа.

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

Обычно такие конструкторы применяются для обработки дат.

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

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

целыми числами (месяц, день и год – 23 12 07);

некоторым текстом (23 декабря 2007 года);

набором с использованием дополнительных символов (20.10.07 или 17/09/2007).

class date

{

...

date() {... }

date(int mm, int dd, int gg) {... }

date (string tekct) {... }

...

};

При инициализации объекта возможен любой из предложенных вариантов.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: