Основное назначение конструктора – создать объект и элементам данных этого объекта присвоить некоторые начальные значения. Иногда этот процесс называют инициализацией объекта.
Создание объекта является основной задачей конструктора.
Присваивание элементам данных объекта некоторых значений может осуществляться различными способами.
В зависимости от способа определения значений элементов данных объекта различают:
– конструкторы с умолчанием;
– конструкторы с заданием параметров;
– множественные конструкторы.
Конструктор с умолчанием вызывается в программе, без каких либо параметров. Например,
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) {... }
...
};
При инициализации объекта возможен любой из предложенных вариантов.