Структура объекта
Переменная типа класса называется объектом. Поскольку объект является переменным, ему выделяется место из памяти компьютера.
Давайте посмотрим, что именно хранится в памяти для каждого объекта.
Значения всех полей данных класса сохраняются.
Это специальное поле (параметр по ссылке), которое создается автоматически при создании объекта, хранит адрес объекта.
С помощью этого параметра реализуется связь методов объекта и класса. Каждый метод класса может напрямую использовать этот параметр для работы с элементами текущего объекта. Поскольку это всегда соответствует текущему объекту (объекту, работающему в данный момент в программе), методы класса работают с элементами текущего объекта.
Использование директивы this позволяет избежать создания копии методов класса для каждого объекта. Таким образом, методы класса не дублируются для каждого объекта.
ЭЛЕМЕНТЫ КЛАССА
Конструкторы
Основная функция конструктора — создать объект и присвоить определенные начальные значения элементам данных этого объекта. Иногда этот процесс называют инициализацией объекта.
Основная задача дизайнера – создать объект.
Присвоение определенных значений элементам данных объекта может осуществляться разными способами.
Их типы:
- конструкторы без параметров;
- конструкторы с параметрами;
- набор (несколько) конструкторов.
Конструкторы без параметров вызываются без параметров в программе. Например,
treygt1 = newtreyg();
Элементам данных объекта t1 присваиваются некоторые производные значения (в основном нули).
При написании такого конструктора (реализация, подготовка-реализация) может использоваться оператор, присваивающий полю данных некоторый производный класс значений.
Например, мы можем добавить в наш класс конструктор без параметров, который присваивает сторонам треугольника значения 3, 4 и 5. Это можно проверить, отобразив периметр объекта:
public treyg()
{
a = 3; b = 4; c = 5;
}
public void printO()
{
p = a + b + c;
ss = "Үшбұрыштыңпериметрі = " + p.ToString();
}
Параметризованные конструкторы позволяют указать начальные значения элементов данных объекта при создании объекта. Вы можете объявить такие конструкторы в классе следующим образом:
public treyg(int sa, int sb, int sc)
{
a = sa; b = sb; c = sc;
}
Рисунок 22.1 – Использование конструктора с начальными значениями, определенными в программе
Многие программисты проверяют значения элементов данных объектов в конструкторе, такие конструкторы называются «умными» конструкторами. Например, при подготовке конструктора для класса Triangle можно добавить следующие проверки элементов данных:
- все стороны треугольника должны быть больше 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;
}
Работа программы показана на рис. 22.2.
Рисунок 22.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) { . . . }
. . .
};
Вы можете использовать любой из предложенных вариантов при инициализации объекта.
Достарыңызбен бөлісу: |